LINGO软件简介
- 格式:docx
- 大小:24.86 KB
- 文档页数:6
lingo引用excel中的矩阵摘要:一、Lingo 软件介绍1.Lingo 软件的基本概念2.Lingo 软件的主要功能和应用领域二、Excel 中的矩阵使用1.Excel 中矩阵的基本概念2.Excel 中矩阵的创建与编辑3.Excel 中矩阵的数据类型与格式三、Lingo 引用Excel 中的矩阵1.Lingo 与Excel 的数据交互2.如何在Lingo 中引用Excel 中的矩阵3.Lingo 引用Excel 矩阵的优势与注意事项四、结论1.Lingo 引用Excel 矩阵的实际应用案例2.Lingo 与Excel 矩阵结合的前景与展望正文:一、Lingo 软件介绍Lingo 是一款专业的数学建模与优化软件,广泛应用于运筹学、统计学、经济学等多个领域。
Lingo 可以帮助用户解决复杂的数学问题,例如线性规划、整数规划、动态规划等。
通过Lingo 软件,用户可以快速地构建数学模型,并对模型进行求解和分析。
二、Excel 中的矩阵使用矩阵是数学中的一个重要概念,它是一个按照长方形阵列排列的复数或实数集合。
在Excel 中,用户可以通过创建公式和函数来创建和编辑矩阵。
Excel 提供了丰富的矩阵操作功能,例如矩阵的相加、相减、相乘、求逆等。
此外,Excel 还可以对矩阵进行数据透视表、图表等可视化操作。
三、Lingo 引用Excel 中的矩阵Lingo 软件可以与Excel 进行数据交互,用户可以在Lingo 中直接引用Excel 中的矩阵。
具体操作方法如下:1.在Excel 中创建或编辑矩阵2.将Excel 文件中的矩阵复制到Lingo 软件中3.在Lingo 中使用矩阵进行建模和求解通过这种方法,用户可以充分利用Excel 的矩阵编辑功能,同时利用Lingo 软件强大的数学建模和求解能力。
这种组合可以大大提高用户的工作效率和建模效果。
四、结论Lingo 引用Excel 矩阵的实际应用案例非常丰富,例如在供应链管理、物流配送、生产调度等领域。
(1) LINGO 软件介绍LINGO 是一种专门用于求解数学规划问题的软件包。
LINGO 主要用于求解线性规划、非线性规划、二次规划、动态规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。
LINGO 中包含了一种建模语言和大量的常用函数,可供使用者在建立数学规划问题的模型时调用。
(2) 示例例如,用LINGO 求解线性规划问题:⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧==≥≥+≥+≥+≥+≥+++≥++++++++++=4,3,2,1;2,1,01002001100170010002000..153751511572521min 241423132212211124232221141312112423222114131211j i x x x xx x x x x x x x x x x x x t s x x x x x x x x z ij只需要打开LINGO ,然后按照下面的操作进行即可。
1、 模型的输入当打开LINGO 后,屏幕将出现如图1所示的窗口。
标题为“LINGO ”的窗口是主窗口,它包含所有的其他窗口以及所有命令菜单和工具栏。
里面的空白窗口用于输入LINGO 的程序代码,代码格式如下:MODEL:图1min=21*x11+25*x12+7*x13+15*x14+51*x21+51*x22+37*x23+15*x24; x11+x12+x13+x14>=2000; x21+x22+x23+x24>=1000; x11+x21>=1700;x12+x22>=1100;x13+x23>=200; x14+x24>=100; END2、 执行从Solve 菜单选择Solve 命令,或者在窗口顶部的工具栏里按Solve 按钮,LINGO 就会先对模型进行编译,检查模型是否具有数学意义以及是否符合语法要求。
如果模型不能通过这一步检查,会看到报错信息,并指出出错的语句。
Lingo、lindo简介一、软件概述 (1)二、快速入门 (4)三、Mathematica函数大全--运算符及特殊符号 (11)参见网址: /一、软件概述(一)简介LINGO软件是由美国LINDO系统公司研发的主要产品。
LINGO是Linear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器。
LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。
其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。
能方便与EXCEL,数据库等其他软件交换数据。
LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。
(二)LINGO的主要特点:Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。
Lingo 提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。
1 简单的模型表示LINGO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。
LINGO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。
模型更加容易构建,更容易理解,因此也更容易维护。
2 方便的数据输入和输出选择LINGO 建立的模型可以直接从数据库或工作表获取资料。
同样地,LINGO 可以将求解结果直接输出到数据库或工作表。
使得您能够在您选择的应用程序中生成报告。
3 强大的求解器LINGO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。
第2章 LINGO 软件使用简介与技巧LINGO 是一种专门用于求解数学规划问题的软件包.由于LINGO 执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用. LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等.本章介绍的LINGO 可在LINGO5.0,LINGO8.0,LINGO9.0中使用.一.LINGO 使用介绍1.1 LINGO 编写格式LINGO 模型以MODEL 开始,以END 结束.中间为语句,分为四大部分(SECTION ): (1) 集合部分(SETS ):这部分以“SETS :”开始,以“ENDSETS ”结束.这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C 语言在在程序的第一部分定义变量和数组一样.在LINGO 中称为集合(SET )及其元素(MEMBER 或ELEMENT ,类似于数组的下标)和属性(A TTRIBUTE ,类似于数组).LINGO 中的集合有两类:一类是原始集合(PRIMITIVE SETS ),其定义的格式为:SETNAME/member list(or 1..n)/:attribute,attribute,etc. 另一类是导出集合(DERIVED SETS ),即引用其它集合定义的集合,其定义的格式为:SETNAME (set1,set2,etc.):attribute ,attribute ,etc.如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分.(2) 目标与约束:这部分定义了目标函数、约束条件等.一般要用到LINGO 的内部函数,可在后面的具体应用中体会其功能与用法.求解优化问题时,该部分是必须的. (3) 数据部分(DA TA ):这部分以“DA TA :”开始,以“END DA TA ”结束.其作用在于对集合的属性(数组)输入必要的数值.格式为:attribut=value_list.该部分主要是方便数据的输入. (4) 初始化部分(INIT ):这部分以“INIT :”开始,以“END INIT ”结束.作用在于对集合的属性(数组)定义初值.格式为:attribute=value_list.由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响.通常可改变初值来得到不同的解,从而发现更好的解.编写LINGO 程序要注意的几点:(1) 所有的语句除SETS 、ENDSETS 、DA TA 、ENDDA TA 、INIT 、ENDINIT 和MODEL ,END 之外必须以一个分号“;”结尾.(2) LINGO 求解非线性规划时已约定各变量非负.1.2 LINGO 内部函数使用详解.LINGO 建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头. (1)常用数学函数@ABS(X) 返回变量X 的绝对数值. @COS( X)返回X 的余弦值,X 的单位为弧度 @EXP( X)返回e x 的值,其中e 为自然对数的底,即 71828.2 @FLOOR( X)向0靠近返回X的整数部分.如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3.@LGM( X)返回Γ函数的自然对数值.@LOG( X)返回变量X的自然对数值.@SIGN( X)返回变量X的符号值,当X<0时为-1;当X>0时为1.@SIN( X)返回X的正弦值,X的单位为弧度@SMAX( X1, X2,..., XN)返回一列值X1, X2,..., XN的最大值.@SMIN( X1, X2,..., XN)返回一列值X1, X2,..., XN的最小值.@TAN( X)返回X的正切值,X的单位为弧度(2)集合函数集合函数的用法如下:set_operator (set_name|condition:expression)其中set_operator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略).逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系算符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于)).常见的集合函数如下:@FOR (set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述.@MAX(set_name:expression)返回集合上的表达式(expression)的最大值.@MIN(set_name:expression)返回集合上的表达式(expression)的最小值.@SUM(set_name:expression)返回集合上的表达式(expression)的和.@SIZE(set_name)返回数据集set_name中包含元素的个数.@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0.(3)变量界定函数变量函数对变量的取值范围附加限制,共有四种.@BND(L,X,U)限制L≤X≤U@BIN(X)限制X为0或1.@FREE(X)取消对X的符号限制(即可取任意实数值).@GIN(X)限制X为整数值.二、LINGO 求解优化模型实验1.某昼夜服务的公交路线每天各时间区段内需司机和乘务人员如下:设司机和乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线路至少配备多少名司机和乘务人员?从第一班开始排,试建立线性模型.分析与求解:注意在每一时间段里上班的司机和乘务人员中,既包括在该时间段内开始时报到的人员,还包括在上一时间段工作的人员.因为每一时间段只有四个小时,而每个司乘人员却要连续工作八个小时.因此每班的人员应理解为该班次相应时间段开始时报到的人员.设i x 为第i 班应报到的人员(i =1,2,…,6),则应配备人员总数为:∑==61i ixZ按所需人数最少的要求,可得到线性模型如下:==61min i i x Z161223344556112660706050..203060,,,0x x x x x x x x s t x x x x x x x x +≥⎧⎪+≥⎪⎪+≥⎪+≥⎪⎨+≥⎪⎪+≥⎪≥⎪⎪≥⎩ LINGO 程序如下:MODEL:min=x1+x2+x3+x4+x5+x6; x1+x6>=60; x1+x2>=70; x2+x3>=60; x3+x4>=50; x4+x5>=20;x5+x6>=30;END得到的解为:x1=60,x2=10,x3=50,x4=0,x5=30,x6=0; 配备的司机和乘务人员最少为150人.2. 公司在各地有4项业务,选定了4位业务员去处理.由于业务能力、经验和其它情况不同,4业务员去处理4项业务的费用(单位:元)各不相同,见下表:表3.2 业务的费用表解:这是一个最优指派问题.引入如下变量: ⎩⎨⎧=项业务个人做第若不分派第项业务个人做第若分派第j i j i x ij 01设矩阵44A ⨯为指派矩阵,其中(,)a i j 为第i 个业务员做第j 项业务的业务费. 则可以建立如下模型:∑∑===4141min i j ij ijx aZ⎪⎪⎪⎩⎪⎪⎪⎨⎧======∑∑==4,3,2,1,104,3,2,114,3,2,11..4141j i x i x j x t s ij j ij i ij 或 LINGO 程序如下: MODEL:SETS:person/1..4/; task/1..4/;assign(person,task):a,x; ENDSETS DATA:a=1100,800,1000,700,600,500,300,800,400,800,1000,900,1100,1000,500,700;ENDDATAmin=@sum(assign:a*x);@for(person(i):@sum(task(j):x(i,j))=1);@for(task(j):@sum(person(i):x(i,j))=1);@for(assign(i,j):@bin(x(i,j)));END得到的结果如下:x(1,1)=0,x(1,2)=0,x(1,3)=0,x(1,4)=1;x(2,1)=0,x(2,2)=1,x(2,3)=0,x(2,4)=0;x(3,1)=1,x(3,2)=0,x(3,3)=0,x(3,4)=0;x(4,1)=0,x(4,2)=0,x(4,3)=1,x(4,4)=0;最小费用为2100元.即第1个业余员做第4项业务,第2个业余员做第2项业务,即第3个业余员做第1项业务,第4业余员做第3项业务.总费用达到最小,为2100元.LINGO程序中输入的数据也可以从文本文件中读入,特别是数据比较多时,将程序与数据分开,显得更方便.如上面程序也可以这样写:MODEL:SETS:person/1..4/;task/1..4/;assign(person,task):a,x;ENDSETSDATA:a=@file(data.txt);ENDDATAmin=@sum(assign:a*x);@for(person(i):@sum(task(j):x(i,j))=1);@for(task(j):@sum(person(i):x(i,j))=1);@for(assign(i,j):@bin(x(i,j)));END同时在LINGO目录下建立文本文件data.txt,数据如下:1100,800,1000,700600,500,300,800400,800,1000,9001100,1000,500,700其计算结果同上面相同.3有四种资源被用于生产三种产品,资源量、产品单件可变费用、单件售价、资源单耗量及组织三种商品生产的固定费用见下表.现要求制定一个生产计划,使总收益最大.表3.3 数据详细表解:总收益等于销售收入减去生产产品的固定费用与可变费用之和.问题的困难之处在于事先不知道某种产品是否生产,因而不能确定是否有相应的固定费用.可引入用0-1变量来解决是否需要固定费用问题.设j x 是第j 种产品的产量,1,2,3j =;再设⎪⎩⎪⎨⎧=>=)0(0)0(1jjjx j x j y种产品若不生产第种产品若生产第 3,2,1=j第I 种产品销售一件可收入7-4=3元,第II 种产品销售一件可收入10-6=4元,第III种产品销售一件可收入20-12=8元.则问题的整数规划模型为:321321200150100843m ax y y y x x x Z ---++=⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧===≥≤≤≤≤++≤++≤++≤++3,2,1,103,2,1,070075310032300432500842..333222111321321321321j y j x y M x y M x y M x x x x x x x x x x x x x t s j j 或且为整数 其中j M 为j x 的某个上界.如根据第2个约束条件,可取100,15021==M M ,753=M .也可统一取其最大值150=M .如果生产第j 种产品,则起产量0>j x .由约束条件j j j y M x ≤知1=j y ,此时相应的生产第j 种产品的固定费用在目标函数被考虑.如果不生产第j 种产品,则起产量0=j x .由约束条件j j j y M x ≤知j y 可为0也可为1.但显然只有0=j y 有利于目标函数最大,从而相应的生产第j 种产品的固定费用在目标函数将不被考虑.因此引入j y 是合理的.下面是LINGO 程序.MODEL: DATA: M=150; ENDDATAmax=3*x1+4*x2+8*x3-100*y1-150*y2-200*y3;!目标函数; 2*x1+4*x2+8*x3<=500; 2*x1+3*x2+4*x3<=300; x1+2*x2+3*x3<=100; 3*x1+5*x2+7*x3<=700; x1<=M*y1; x2<=M*y2;x3<=M*y3;@GIN(x1);@GIN(x2);@GIN(x3); !指定产品件数为整数; @BIN(y1);@BIN(y2);@BIN(y3); !指定0-1变量;end得到的解为x1=100,x2=0,x3=0,y1=1,y2=0,y3=0.最大值为Z=200元.3 TSP 问题及LINGO 求解技巧巡回旅行商问题(Traveling Salesman Problem ,TSP),也称为货郎担问题。
Lingo软件简介Lindo/Lingo 运筹学软件LINDO和LINGO是美国LINDO系统公司开发的一套专门用于求解最优化问题的软件包。
LINDO用于求解线性规划和二次规划,LINGO除了具有LINDO的全部功能外,还可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解以及代数方程求根等。
LINDO和LINGO软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。
LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其它数据文件(如文本文件、EXCEL 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。
由于这些特点,LINDO和LINGO软件在教学、科研和工业、商业、服务等领域得到广泛应用。
LINDO系统公司的产品主要有以下几种:What'sBest!What'sBest! 是附加在Excel电子表格中用于建立大规模最优化模型的软件。
What's Best! 将强大的线性规划、非线性规划、整数最优化求解功能同当今经济建模中最流行、最具灵活性的Microsoft Excel结合起来共同求解问题。
What'sBest! 的主要优势:●世界上最强大的Microsoft Excel 求解软件●建模方便快捷●可以为客户和同行建立简单易懂的模型●提供大量的文档和帮助信息LINGOLINGO是快速、便捷、高效地建立模型并求解线性规划、非线性规划和整数最优化问题的工具。
LINGO提供一个综合的软件包,其中包括强大的最优化模型建模语言、建模和求解问题的特征环境以及一套内置的解算机。
LINGO 的主要优势●简单的建模语言●方便数据选择●强大的解算机●交互式模型●提供大量的文档和帮助信息LINDO API通过LINDO API你可以轻松创建自己的最优化模型。
它允许将LINDO解算机加载到自己编写的特定应用程序中。
LINGO 软件简介LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整数规划等问题。
一个简单示例有如下一个混合非线性规划问题:⎪⎩⎪⎨⎧≥≤≤+++---+为整数2132121321322212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。
LINGO 程序(模型): max =98*x1+277*x2-x1^*x1*x2-2*x2^2+150*x3;x1+2*x2+2*x3<=100; x1<=2*x2;@gin (x1);@gin (x2);! Lingo 默认变量非负(注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示限制LxU ;@free(x)表示取消对x 的符号限制,即可正、可负。
) 结果:Global optimal solution found.Objective value:Extended solver steps: 0 Total solver iterations: 45Variable Value Reduced Cost X1 X2 X3Row Slack or Surplus Dual Price 1 2 3 ———————— 非常简单!在LINGO 中使用集合为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。
例如:对⎪⎪⎩⎪⎪⎨⎧==-++-==≤++∑=.,,;10)0(;4,3,2,1),()())()1()(;4,3,2,1,20)(..)}(20)(450)(400{min4,3,2,1均非负INV OP RP INV I I DEM I OP I RP I INV I INV I I RP t s I INV I OP I RP I求解程序:model : sets :mark/1,2,3,4/:dem,rp,op,inv;!也可以vmark/1..4/:dem,rp,op,inv;endsetsmin=@sum(mark:400*rp+450*op+20*inv);!也可以mark(I):400*rp(I)+450*op(I)+20*inv(I);@for(mark(I): rp(I)<40);@for(mark(I)|I#gt#1: inv(I)=inv(I-1)+rp(I)+op(I)-dem(I));inv(1)=10+rp(1)+op(1)-dem(1);data:dem=40,60,75,35;enddataend上面程序在model…end之间有(1)集合定义、(2)数据输入和(3)其他三部分内容。
集合定义部分(从sets:到endsets):定义了一个指标集合mark(可以理解为数组下标及其范围)和其4个属性dem、rp、op、inv(用此向量的数组变量)。
数据输入部分(从data:到enddata)依次给出常量(dem)的值。
其他部分:给出优化目标及约束。
一般而言,LINGO中建立优化模型的程序可以由五部分组成,或称为五段(section):(1)集合段(SETS):这部分以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量(SET)及其元素(member,含义类似于数组的下标)和属性(attribute,含义类似于数组)。
(2)目标与约束段:这部分实际上定义了目标函数、约束条件等,但这部分没有段的开始和结束标记;该段一般常用到LINGO内部函数,尤其是和集合相关的求和函数@SUM和循环函数@FOR等。
(3)数据段(DATA):这部分以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性(数组)输入必要的常数数据。
格式为:attribute(属性)=value_list(常数列表);常数列表中的数据之间可以用逗号、空格或回车符分隔。
如果想要在运行时才对参数赋值,可以在数据段使用输入语句,其格式为“变量名=;”,但仅限对单个变量赋值,而不能用于属性变量(数组)的单个元素。
(4)初始段(INIT):这部分以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性(数组)定义初值(因为求解算法一般是迭代算法,提供一个较好的初值,能提高计算效果)。
定义初值的语句格式为:attribute(属性)=value_list(常数列表);这与数据段中的用法类似。
(5)计算段(CALC):这部分以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行预处理加工,使其成为模型直接需要的数据。
该段中通常是计算赋值语句。
基本集合与派生集合为了处理二维数组变量等有多个下标的问题,LINGO引入了“派生集”的概念。
我们把直接列出元素的指标集合叫“基本集合”,而基于其他集合派生出来的二维或多维指标集合称为“派生集”。
派生集的定义格式为:派生集名(原始集合1,原始集合2,…,原始集合n):属性变量列表;实际上就是笛卡儿积的意思,即:派生集={(i1,i2,…i n)| i1集合1, i2集合2,…, i n集合n}。
1)一个应用例子(布局问题):某些建筑工地的位置(用平面坐标a,b表示)及水泥日用量d已知。
现有A、B两临时料场位于P(5,1)、Q(2,7),日储量20。
问A、B两料场分别向各工地运输多少吨水泥,使总吨公里数最小若重新安排两料场的位置,应怎样安排才能使总吨公里数最小这样安排可节省多少吨公里设工地位置(a i,b i),水泥日用量为d i(i=1,2,…,6);料场位置(x i,y i),日储量e j,j=1,2;从料场j向工地i运送量为cij。
该问题的数学模型为:LINGO求解程序为:MODEL:sets:Imark/1..6/:a,b,d;Jmark/1,2/:x,y,e;IJmark(Imark,Jmark):c;endsetsdata:!Location for demand(需求点位置);a=,,,,3,;b=,,,5,,;!Quantities of the demand and supply(供需量);d=3,5,4,7,6,11;e=20,20;enddatainit:!Initial location for the supply(初始点);x,y=5,1,2,7;endinit!Objective function(目标);[OBJ] min=@sum(IJmark(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));!demand contraints(需求约束);@for(Imark(i):[DEMAND_CON] @SUM(Jmark(j):c(i,j))=d(i););!supply constrains(供给约束);@for(Jmark(j):[SUPPLY_CON] @SUM(Imark(i):c(i,j))<=e(j););@for(Jmark: @free(x);@free(y););END2)一个动态规划的例子:(最短路问题)从S城市到T城市之间找一条最短路径,道路情况如下:数学模型为:LINGO求解程序:model:sets:cities/s,a1,a2,a3,b1,b2,c1,c2,t/:L; !属性L(i)表示城市S到城市i的最优行驶路线的里程;roads(cities,cities)/ !派生集合roads表示的是网络中的道路;s,a1 s,a2 s,a3 !由于并非所有城市间都有道路直接连接,所以将路具体列出;a1,b1 a1,b2 a2,b1 a2,b2 a3,b1 a3,b2b1,c1 b1,c2 b2,c1 b2,c2 !属性D(i,j)是城市i到城市j的直接距离(已知); c1,t c2,t/:D;endsetsdata:D= 6 3 36 5 8 67 46 7 8 95 6;L=0,,,,,,,,; !因为L(s)=0;enddata@for(cities(i)|i#gt#@index(s): !这行中"@index(s)"可以直接写成"1";L(i)=@min(roads(j,i):L(j)+D(j,i));); !这就是最短路关系式;endVariable ValueL( S)L( A1)L( A2)L( A3)L( B1)L( B2)L( C1)L( C2)L( T)最短路径为: S-〉A3-〉B2-〉C1-〉T3)(指派问题)设有6个人做6件事。
其中c ij表示第i人做第j事的收益;设第i人做第j 事时x说明:其中“-”表示某人无法做该事。
可令其为-(表示绝对不行)或0(领薪不用干活)LINGO求解程序:MODEL:sets:Imark/1..6/:i;Jmark/1..6/:j;IJmark(Imark,Jmark):c,x;endsetsdata:!第i人做第j事的收益;c=20,15,16,5,4,717,15,33,12,8,69,12,18,16,30,1312,8,11,27,19,14-99,7,10,21,10,32-99,-99,-99,6,11,13;enddata[OBJ] max=@sum(IJmark(i,j): c*x);!每人做一项工作;@for(Imark(i): @SUM(Jmark(j):x(i,j))=1;);!每事一人做;@for(Jmark(j): @SUM(Imark(i):x(i,j))=1;);@for(IJmark: @bin(x));!本约束可以不要,因为有解时必为0或1;END4)(生产与销售计划问题)某公司用两种原油(A和B)混合加工成两种汽油(甲和乙)。
甲、乙两种汽油含原油A的最低比例分别为50%和60%,每吨售价分别是4800元和5600元。
该公司现有原油A和B的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A。
原油A的市场价为:购买量不超500吨时单价为10000元/吨;购买量超过500吨但不超1000吨时,超过500吨部分单价为8000元/吨;购买量超过1000吨部分的单价是6000元/吨。
该公司应如何安排原油的采购和加工以获得最大利润数学模型:设原油A用于生产甲、乙两种汽油的数量分别是x11和x12,原油B用于生产甲、乙两种汽油的数量分别是x21和x22;购买原油A的数量是x吨,采购支出为c(x)千元/吨。