《lingo入门》P三PT课件.ppt

上传人:本田雅阁 文档编号:2929630 上传时间:2019-06-07 格式:PPT 页数:122 大小:5.98MB
返回 下载 相关 举报
《lingo入门》P三PT课件.ppt_第1页
第1页 / 共122页
《lingo入门》P三PT课件.ppt_第2页
第2页 / 共122页
《lingo入门》P三PT课件.ppt_第3页
第3页 / 共122页
《lingo入门》P三PT课件.ppt_第4页
第4页 / 共122页
《lingo入门》P三PT课件.ppt_第5页
第5页 / 共122页
点击查看更多>>
资源描述

《《lingo入门》P三PT课件.ppt》由会员分享,可在线阅读,更多相关《《lingo入门》P三PT课件.ppt(122页珍藏版)》请在三一文库上搜索。

1、Lingo优化软件入门,(商用版) 舒兴明,一、Lindo/Lingo软件简介,1、美国芝加哥大学的Linus Schrage教授于1980年前后开发的专门用于求解最优化问题的软件包,后经多年完善与扩充,并成立了LINDO系统公司进行商业运作取得巨大成功。根据 LINGO公司主页(http:/)提供的信息,位列财富杂志500强的企业中,有一半以上使用Lingo优化软件,前25强有23企业使用Lingo优化软件。用户可以在 主页自由下载各类子包的演示版和应用 例子。演示版和正式版功能类似,只是求解问题规模受到限制。各类版本的限制如下表,LINGO是英文Linear Interactive and

2、 General Optimizer首写字母的缩写,即“交互式线性和通用化求解器”。,2、Lindo/Lingo软件内部有以下4个求解程序用于求解不同类型的优化模型,(1)直接求解器(Direct Solver);,(2)线性优化求解程序(Linear Solver);,(3)非线性优化求解程序(Nonlinear Solver);,(4)分支定界管理程序(Branch and Bound Manager)。,对于已经输入的一个优化模型,一旦发出求解指令,第一步是对等式约束的直接处理,例如,如果约束中有三个等式约束,Xyz=30, X+y=8, Y=5,则Lingo软件能直接确定y=5,x=3

3、,z=2,这三个变量就变成常数了。这样就尽量减少模型的规模(变量数和约束数),从而使得求解更加有效快捷。第二步就是识别模型的类型,根据类型调用不同的处理器来求解。,而处理器识别模型会在计算界面给出说明:,LP:线性规划模型 QP:二次规划模型 NLP:非线性规划 ILP:整数线性规划 INLP:整数非线性规划 IQP:整数二次规划,二、建立优化模型应注意的几个问题,1、尽量使用实数优化模型,尽量减少整数约束和整数变量的个数;,2、尽量使用光滑优化模型,尽量避免使用非光滑函数;,尽量少用绝对值函数(|x|)、符号函数(当x0时,函数为1)、多个变量求最大(或最小)、四舍五入函数、取整函数等。,3

4、、尽量使用线性优化模型,尽量减少非线性约束和非线性变量(非线性约束中的变量)的个数;,4、合理设定变量的上下界,避免计算陷入“大海捞针”。,5、模型中使用的单位的数量级要适当,Lingo计算时,最大数尽量不要超过最小数的1000倍,如果出现100000000与0.1的计算,误差很大!小数湮没于大数!,例1,例1 化下列非线性规划化为线性规划,解,令,,代入原规划模型,得,解,设,,由此解得,同理,有,代入模型,注意增加约束,解,令,,则此约束的充分条件是,所以,原模型等价于,最高分越低越好!,解 设,,此约束等价于,所以原模型等价于,最低分越高越好!,三、编写一个简单的lingo程序,1、安装

5、lingo优化软件,根据一般的程序安装方法,运行setup.exe文件,只要按照提示步骤,就可以顺利安装完毕。在第一次运行lingo(这里以lingo8.0为例)需要你输入密码(安装序列号),如果没有,就只有使用演示版(试用版),假设你购买的是正版,把复制好地秘密粘贴到此窗口即可。,2、编写一个简单的LINGO程序,例2 在lingo的编辑窗口输入如下规划(二次规划),x1+x2100; x12*x2; max=98*x1+277*x2-x12-0.3*x1*x2-2*x22; gin(x1);gin(x2);,例2,根据上面的书写格式,归纳如下:,(1)Lingo总是根据“max=“或”mi

6、n=“语句寻找目标函数,其它语句都是约束条件(注释句除外),即输入时不需要按顺序输入;,(2)Lingo中不区分大小写字母,Lingo中的变量名可以超过8个字符,但不能超过32个字符,且必须以字母开头,其中不能含有中文;,(3) Lingo中已假设所有变量都是非负的,所以当x=0时,不必在输入计算机中,相反,如果有变量x可以取负数,则应规范free(x);,(4)Lingo中的=,替换,即不区分大于等于和大于,小于等于和小于;,例如:y=sinx-1,数学上y取值于【-2,0】,如果是写在lingo程序中,就导致y=0!,(必须加上free(y)),为什么?,(5)输入的多余的空格和回车都会被

7、忽略,一个约束可以分两行或者多行书写;,(6)Lingo模型是由一系列语句构成,即语句是组成Lingo模型的基本单位,每个语句都是以分号“;”结尾,但尽量一个语句用一行来书写;,(7) 以感叹号“!”开始的语句是说明语句(注释语句,以便读者更好理解程序),但计算机在读取模型时,会忽略这样的语句。,(8)在Lingo中,以“”开头的都是调用函数,这在后面专门叙述。,3、计算,摁这个按钮就可以开始计算,如果有错误,根据提示逐步修改。最终得到一个计算状态文档(如下所示),Lingo程序常见错误:乘号“*”漏掉;分号“;”漏掉;变量名没有定义;函数标示“”漏掉;括号不配对;sets,endsets,d

8、ata,enddata(不是enddate!)后加分号。,同时也得到一个求解结果的窗口,Global optimal solution found at iteration: 364 Objective value: 11077.50 Variable Value Reduced Cost X1 35.00000 -1.999947 X2 65.00000 0.000000 Row Slack or Surplus Dual Price 1 0.000000 6.500069 2 95.00000 0.000000 3 11077.50 1.000000,得到最优解迭代次数为364次,目标值为

9、11077.5,其中x1=35,x2=65,其余的解读后面再给出。,例3,例3,min=4*x11+12*x12+4*x13+11*x14 +2*x21+10*x22+3*x23+9*x24 +8*x31+5*x32+11*x33+6*x34; x11+x12+x13+x14=16; x21+x22+x23+x24=10; x31+x32+x33+x34=22; x11+x21+x31=8; x12+x22+x32=14; x13+x23+x33=12; x14+x24+x34=14;,Global optimal solution found at iteration: 6 Objectiv

10、e value: 244.0000 Variable Value Reduced Cost X11 4.000000 0.000000 X12 0.000000 2.000000 X13 12.00000 0.000000 X14 0.000000 0.000000 X21 4.000000 0.000000 X22 0.000000 2.000000 X23 0.000000 1.000000 X24 6.000000 0.000000 X31 0.000000 9.000000 X32 14.00000 0.000000 X33 0.000000 12.00000 X34 8.000000

11、 0.000000,四、Lingo运算符,1、算术运算符,+ - * / ,加 减 乘 除 幂,2、逻辑运算符,2.1 逻辑值之间的运算符,#AND# #OR# #NOT#,与 或 非,算术运算符是数与数之间的运算,结果也是数。,参与运算的是逻辑值,结果也是逻辑值,逻辑值只有“真”(True=1)和“假”(False=0)两个值。,2.2 逻辑表达式的比较符,#EQ# #NE# #GT# #GE# #LT# #LE#,等于 不等于 大于 大于等于 小于 小于等于,这6个操作符实际还是“数与数之间的”比较,而逻辑表达式计算的结果是逻辑值。,3、关系运算符,(=) =,小于(小于等于) 大于(大于

12、等于) 等于,这三个符号表示数与数之间的大小关系,4、运算符的优先级别,优先级 运算符,最高,最低,#not# -(负号),* /,+ -(减法),#eq# #ne# #gt# #ge# #lt# #le#,#and# #or#,括号“()”优先,同行从左往右计算顺序。,五、函数,abs(x): 绝对值函数,返回x的绝对值; cos(x):x的余弦值,x是弧度值; sin(x):x的正弦值,x是弧度值; tan(x):x的正切值,x是弧度值; exp(x):ex; log(x):ln(x); lgm(x):返回x的伽玛函数的自然对数,当x为整数时,lgm(x)=ln(x-1)!,如果x不是整数

13、采用线性插值的结果;例如:lgm(2.3)0.7lgm(2)+0.3lgm(3)。,1、基本函数,mod(x,y):模函数,即x除以y的余数,x,y是整数;,pow(x,y):xy;,sign(x):返回x的符号值,x0,sign(x)=1,x0,sign(x)=-1,x=0,sign(x)=0;,smax(list):返回数列list的最大值;,smin(list):返回数列list的最小值;,sqr(x):x*x;,sqrt(x):x的平方根;,floor(x):取整(返回x的整数部分);,prod(list):返回连乘的积;,2、变量定界函数,bnd(L,X,U):限制LxU;,bin(

14、X):限制x为0或1;,gin(x):限制X只能取整数;,FREE(X):取消对x的符号限制,可以取负数,0,正数.,六、在lingo中使用集合模型(例4),例4 某部门有三个生产同一产品的工厂(产地),生产的产品运往四个销售点(销地)出售,各个工厂的生产量、各销地的销量(单位:吨)、从各个工厂到各个销售点的单位运价(元/吨)如下表,研究如何调运才能使得总运费最小。,产地,销地,1 2 3 4 产量,1,2,3,销 量,4 12 4 11 16,2 10 3 9 10,8 5 11 6 22,8 14 12 14 48,分析,一个完整的调运方案,要明确地给出从每个产地运往各个销地的具体运输量(

15、当然是总运输费用越小,方案越好)。,符号设置,Xij:表示从第i产地调运到第j销地的运输量; i=1,2,3;j=1,2,3,4,Cij:表示从第i产地运往第j销地的单位运价;,Ai:表示第i产地的产量;i=1,2,3,Bj:表示第j销地的销售量;j=1,2,3,4,调运量表格,运价表格,总的调运费用为,(每条道路运费之和),对每个产地来说,调运量总和不超过该产地的产量,对每个销售地来说,调运量总和必须满足销售需求,各种调运量非负,数学模型,如果此模型扩展到有50个产地和100个销售地的规模,从理解问题的角度看,就是让i=1,2,50;j=1,2,100就行了,但是为了让计算机处理,还是按照前

16、面的一行一个语句逐字逐句地输入,工作量就太大了。Lingo就有节约时间的输入方式,且计算机也能理解,那就是集合式输入法。,1、集合(下标)部分,这一部分定义集合以及属性(这里以例4为例叙述),规范格式,sets: chandi/1,2,3/:a; endsets,这样就定义了集合chandi=1,2,3,对应的属性(与这个下标有关的量)a,于是上述语句就定有了a(1),a(2),a(3)这三个变量名(可能是决策变量,也可能是已知量),表示是三个产地的产量。,在计算过程中,只要出现chandi,就表示按顺序取值于1,2,3。,上面的集合定义,如果集合元素比较多,则采用下面的定义方式,sets:

17、chandi/13/:a; endsets,如果是,sets: chandi/150/:a; endsets,那就定义了50个变量名a(1),a(2),a(50)。,而例4中,有三个产地(及其产量),四个销售地(相应的产量),则可以如下定义,这样就定义了chandi这个集合,与这个集合有关的属性a,xiaodi这个集合,与这个集合有关的属性b,直接定义了a(1),a(2),a(3),b(1),b(2),b(3),b(4),这样直接定义的集合称为基本集合。,例4中,还有形如x12,c12这样的变量名如何定义呢?这样的变量既与产地有关,又与销地有关,于是就由chandi这个集合与xiaodi这个集

18、合联合生成一个笛卡尔集,称为派生集合(关联变量的下标范围):,sets: chandi/13/:a; xiaodi/14/:b; link(chandi,xiaodi):x,c; endsets,这样就增加了一个新的集合link,它由chandi和xiaodi两个集合生成,从数学看,与之有关的属性为x,c,就定义了如下变量名,X(1,1),x(1,2),x(1,3),x(1,4),x(2,1),x(2,2),x(2,3),x(2,4),x(3,1),x(3,2),x(3,3),x(3,4) c(1,1),c(1,2),c(1,3),c(1,4),c(2,1),c(,2,2),c(2,3),c(

19、2,4),c(3,1),c(3,2),c(3,3),c(3,4),2、数据部分,这部分格式:,data: a=16,10,22; b=8,14,12,14; c=4 12 4 11 2 10 3 9 8 5 11 6; enddata,以”data:”开始,以“enddata”结束。不管变量是行还是列,都采用行写,行元素见可以逗号“,”隔开,也可以空格隔开。而矩阵输入时,先行后列,每行输入完毕,就回车(enter),再输入一行,直到输入完毕,再分号“;”每个变量的数据输入完毕,都用分号“;”结束。,3、模型部分,这样部分要把模型的约束和目标函数全部反应出来(仍然以例4为例书写),如下约束,即对

20、每个产地i(i=1,2,3)来说,从这里运往各个销地(j=1,j=2,j=3,j=4)的运输量之和:,不超过产地i 的产量a(i),即,X(i,1)+x(i,2)+x(i,3)+x(i,4),x(i,1)+x(i,2)+x(i,3)+x(i,4)= a(i),i=1,2,3,对每个i: for(chandi(i):),对所有销地j求和,sum(xiaodi(j):x(i,j),X(i,1)+x(i,2)+x(i,3)+x(i,4)= a(i),i=1,2,3,对每个i: for(chandi(i): ),对所有销地j求和,sum(xiaodi(j):x(i,j),按照这个逻辑,合并为:,for

21、(chandi(i): sum(xiaodi(j): x(i,j) = a(i) );,求和,求和范围,求和对象,第i个约束条件,对每个chandi,按照上面的分析方法,对每个销售地来说,调运量总和必须满足销售需求,for(xiaodi(j): sum(chandi(i): x(i,j) = b(j) );,目标是将所有线路的运费求和,并使之最小化,即,min= sum( link(i,j): c(i,j)*x(i,j);,求和对象,求和范围,求和函数,目标标识,注意:以上写法中,注意括号匹配,分号结束。,4、初始值部分,在针对线性规划时,这个部分不需要。但是针对非线性规划,这个部分就有必要了

22、,给出决策值的迭代始点,更容易找到局部最优解,同时,给出不同的初始值,可以尝试寻找不同的局部最优解,然后加以比较,找到较好的局部最优解,作为全局最优解使用。,例5,min=exp(-x1-x2)*(2*x12+3*x22); init: x1=2; x2=2; endinit,例6 将数学模型翻译成lingo模型,sets: bianliang/14/:x,c; fangcheng/13/:b; link(fangcheng,bianliang):a; endsets data: c=-3 4 -2 5; b=-2 14 -2; a=4 -1 2 -1 1 1 -1 2 2 -3 -1 1;

23、enddata min=sum(bianliang(j):c(j)*x(j); for(fangcheng(i)|i#eq#1:sum(link(i,j):a(i,j)*x(j)=b(i); for(fangcheng(i)|i#gt#1:sum(link(i,j):a(i,j)*x(j)b(i); free(x(4);,生成模型,以检查对错!,生成结果:,MIN - 3 X( 1) + 4 X( 2) - 2 X( 3) + 5 X( 4) SUBJECT TO 2 4 X( 1) - X( 2) + 2 X( 3) - X( 4) = - 2 3 X( 1) + X( 2) - X( 3)

24、 + 2 X( 4) = 14 4 2 X( 1) - 3 X( 2) - X( 3) + X( 4) = - 2 END FREE X( 4),和前面的模型一样!,MIN - 3 X( 1) + 4 X( 2) - 2 X( 3) + 5 X( 4) SUBJECT TO 2 4 X( 1) - X( 2) + 2 X( 3) = - 2 3- X( 1) + X( 2) + X( 3) = 14 4- X( 1) + 2 X( 2) + 2 X( 3) = - 2 END FREE X( 4),七、集合函数的补充,1、集合循环函数,集合循环函数的一般用法:,function(setname

25、(set_index_list)|condition:expression_list);,其中:,function是for,sum,max,min,prod之一;,Setname 集合名;,Set_index_list 集合索引列表(不需要时可略去);,Condition 用逻辑表达式描述的过滤条件;,Expression_list 是一个表达式或一组表达式。,for(集合元素的循环函数):对集合setname的每个元素独立地生成表达式,表达式由expression_list描述;,max(集合属性的最大值函数):返回集合setname 上的表达式的最大值;,min(集合属性的最小值函数):返

26、回集合setname上的表达式的最小值;,sum(集合属性的求和函数):返回集合setname上表达式的和;,prod(集合属性的乘积函数):返回集合setname上表达式的积。,在lingo窗口举例计算!,sets: jihe/14/:a,b; endsets data: a=1 2 3 4; enddata for(jihe(i):b(i)=2*a(i); y0=prod(jihe(i):a(i); y1=min(jihe(i):a(i); y2=sum(jihe(i):a(i); y3=sum(jihe(i)|i#lt#2:a(i);,Feasible solution found. T

27、otal solver iterations: 0 Variable Value Y0 24.00000 Y1 1.000000 Y2 10.00000 Y3 1.000000,y3= sum (jihe (i) |i#lt#2: a(i);,function,setname,set_index_list,|condition:,expression_list,2、集合操作函数,index(set_name, primitive_set_element),这个函数给出元素primitive_set_element在集合set_name 中的索引值(即定义集合时元素出现的顺序的位置编号)。如果其

28、中set_name省略,就默认在第一个集合中索引。例如,Sets: Girls/Debble,Sue,Alice/:; Boys/Bob,Joe,Sue/:; endsets n1=index(girls,Sue); n2=index(boys,sue); n3=index(sue);,Variable Value N1 2.000000 N2 3.000000 N3 2.000000,运行结果,in(set_name,primitive_index_1,primitive_index_2 ),这个函数用于判断一个集合中是否有某个索引值,如果集合set_name中含有索引primitive_i

29、ndex_1 ,pimitive_index_2 所标示的对应元素,则返回1(逻辑值“真”),否则返回0.索引用“&1”,“&2”或index函数等形式给出,这里”&1”标示对应与第一个父集的元素的索引值,”&2”表示第二个父集的元素的索引值。例如,sets: students/zhao,qian,sun,li/:; passed/qian,sun/:; failed(students)|#not#in(passed,sets: a/13/:; b/x y z/:; c(a,b)/1,x 1,z 2,y 3,x/:; endsets n=in(c,index(a,2),index(b,y);,

30、Feasible solution found at iteration: 0 Variable Value N 1.000000 Row Slack or Surplus 1 0.000000,size(set_name);,返回数据集set_name中包含的元素的个数。,八、概率论中相关函数,psn(x):标准正态分布函数,返回x处的分布函数值;,pps(a,x):返回参数为a的泊松分布在x处分布函数值;,pbn(p,n,x):返回参数为(n,p)的二项分布在x处的分布函数值;,phg(m,g,n,x):当总共有m个球,g个是白色球,随机取出n个球,白球不超过x个的概率;,pfd(n,d,

31、x):返回自由度为n和d的F分布在x处的分布函数值;,pcx(n,x):返回自由度为n的卡方分布x处的分布值;,ptd(n,x):返回自由度为n的t分布x处的分布函数值;,qrand(seed):返回0与1之间的多个拟均匀随机数(seed为种子,默认时取当前计算机为种子),该函数只能用在数据段;,rand(seed):返回0与1之间的一个伪均匀随机数(seed为种子);,n=rand(2); sets: a/15/:x; endsets data: x=qrand(5); enddata,Variable Value N 0.3459576 X( 1) 0.7297880 X( 2) 0.18

32、29383 X( 3) 0.1911310 X( 4) 0.7948646 X( 5) 0.3703985,九、文件输入输出函数,1、通过文本文件输入数据,file(filename),file函数通常可以在集合段和数据段使用,但不允许嵌套使用。表示当前模型引用其它ASCII码文件中的数据或者文本可以采用该语句,其中filename为存放数据的文件名(可以包含完整的路径名,没有指定路径时,表示默认路径)。另外,该文件中记录之间必须用“”分开。用一个例子说明,打开Lingo编辑窗口,输入如下文本:,Seattle,Detroit,Chicago,Denver Cost,need,supply,o

33、rdered 12,28,15,20 1600,1800,1200,1000 1700,1900,1300,1100,在存盘时,存在d:shuju11.ldt(后缀ldt文件),再打开一个编辑窗口,建立如下lingo模型,sets: myset/file(d:shuju11.lng)/:file(d:shuju11.lng); endsets min=sum(myset(i):ordered(i)*cost(i); for(myset(i):ordered(i)need(i);ordered(i)supply(i); data: cost=file(d:shuju11.lng); need=f

34、ile(d:shuju11.lng); supply=file(d:shuju11.lng); enddata,注意:上面书写格式后缀*.ldt是ling8.0为参考,lingo11应该把文件名后缀改为*.lng。总之,是以具体的lingo版本为参考!,运行计算器,得到,Global optimal solution found at iteration: 4 Objective value: 107600.0 Variable Value Reduced Cost COST( SEATTLE) 12.00000 0.000000 COST( DDETROIT) 28.00000 0.0000

35、00 COST( CHICAGO) 15.00000 0.000000 COST( DENVER) 20.00000 0.000000 NEED( SEATTLE) 1600.000 0.000000 NEED( DDETROIT) 1800.000 0.000000 NEED( CHICAGO) 1200.000 0.000000 NEED( DENVER) 1000.000 0.000000 SUPPLY( SEATTLE) 1700.000 0.000000 SUPPLY( DDETROIT) 1900.000 0.000000 SUPPLY( CHICAGO) 1300.000 0.0

36、00000 SUPPLY( DENVER) 1100.000 0.000000 ORDERED( SEATTLE) 1600.000 0.000000 ORDERED( DDETROIT) 1800.000 0.000000 ORDERED( CHICAGO) 1200.000 0.000000,或者把数据存在记事本上,每个数据间还是用隔开,例如存放在d:shuju13.txt。(注意后缀txt),注意:数据直接存在word文本中,不可如此调用!,也可以调用该文本中数据直接计算,sets: myset/file(d:shuju13.txt)/:file(d:shuju13.txt); ends

37、ets min=sum(myset(i):ordered(i)*cost(i); for(myset(i):ordered(i)need(i);ordered(i)supply(i); data: cost=file(d:shuju13.txt); need=file(d:shuju13.txt); supply=file(d:shuju13.txt); enddata,Seattle,Detroit,Chicago,Denver Cost,need,supply,ordered 12,28,15,20 1600,1800,1200,1000 1700,1900,1300,1100,sets:

38、 myset/file(d:shuju11.ldt)/:file(d:shuju11.ldt); endsets min=sum(myset(i):ordered(i)*cost(i); for(myset(i):ordered(i)need(i);ordered(i)supply(i); data: cost=file(d:shuju11.ldt); need=file(d:shuju11.ldt); supply=file(d:shuju11.ldt); enddata,1,1,2,2,3,3,4,4,5,5,模型的集合和数据段共5次使用file函数,分别调用shuju11.ldt中的5个

39、段落的数据。,2、通过电子表格传递数据,当所给的参数的数据庞大,再一个个录入lingo编辑窗口的数据段,显得麻烦,就直接在lingo模型的数据段,用命令调入电子表格的数据名称和相关数据就可以了。,在前面的例4中,假设数据录入在电子表格中:,上面的数据存放在d:shuju22.xls,再分别插入名称,操作如下:,插入名称定义,也就是在文件shuju22.xls中,把三个数据块分别给定名称:运费数据cc,产量数据aa,销量数据bb。,然后在lingo模型的数据段加以调用就可,调用格式:,ole(spreadsheet_file,range_name_list,其中,spreadsheet_file

40、是电子表格的名称,应当包括扩展名.xls,还包括完整的路径名,只要不超过64字符数就可。Range_name_list是指文件中包括数据单元范围。以上面的例子来说明:,sets: chandi/13/:a; xiaodi/14/:b; yunfei(chandi,xiaodi):c,x; endsets min=sum(yunfei(i,j):c(i,j)*x(i,j); for(chandi(i):sum(xiaodi(j):x(i,j)=b(j); data: a=ole(d:shuju22.xls,aa); b=ole(d:shuju22.xls,bb); c=ole(d:shuju22

41、.xls,cc); enddata,运行结果如下:,Global optimal solution found at iteration: 8 Objective value: 244.0000 Variable Value Reduced Cost A( 1) 16.00000 0.000000 A( 2) 10.00000 0.000000 A( 3) 22.00000 0.000000 B( 1) 8.000000 0.000000 B( 2) 14.00000 0.000000 B( 3) 12.00000 0.000000 B( 4) 14.00000 0.000000 C( 1,

42、1) 4.000000 0.000000 C( 1, 2) 12.00000 0.000000 C( 1, 3) 4.000000 0.000000 C( 1, 4) 11.00000 0.000000 C( 2, 1) 2.000000 0.000000 C( 2, 2) 10.00000 0.000000 C( 2, 3) 3.000000 0.000000,在上面的计算例子中,也可以应用ole函数,将lingo计算的结果返回到shuju22.xls中的某个名称(这个名称必须先在shuju22.xls中先命名,格式如下,sets: chandi/13/:a; xiaodi/14/:b; y

43、unfei(chandi,xiaodi):c,x; endsets min=sum(yunfei(i,j):c(i,j)*x(i,j); for(chandi(i):sum(xiaodi(j):x(i,j)=b(j); data: a=ole(d:shuju22.xls,aa); b=ole(d:shuju22.xls,bb); c=ole(d:shuju22.xls,cc); ole(d:shuju22.xls,xx)=x;!将计算结果返回数据文件中; enddata,在shuju22.xls相应模块就添加了计算结果,3、将lingo模型嵌入、链接到电子表格文件中,将刚才的shuju22.x

44、ls文件打开,另存为shuju23.xls,在此文件执行”插入|对象”,出现如下对话框:,在对话框中选择“lingo document”,然后再“确定”,这时在shuju23.xls中出现一个lingo文本框,双击这个文本框,就会发现电子表格的菜单工具栏变成了lingo 有关的应用菜单工具栏。,如果你想运行lingo程序,就直接执行”lingo|solver”命令就可以了(注意,要将lingo模型中=ole调用文件改为shuju23.xls,就会发现刚才的xx模块的数据自动修改了。,十一、解的读取,1、对偶问题,例7 产品加工问题的逆问题(对偶问题),例8 在例1中,如果有另一家工厂,想把这家

45、工厂的三种资源收买过来,它至少应付出多大代价,才能使这家工厂放弃生产活动,出让自己的资源。(拓展思考:如果你拥有资源,你会有哪些选择?,(1)自己组织生产赚取利润;,(2)把资源出租,收取适当租金。,试想一下:如果你长期在(1)和(2)中作决策,那么会发现哪一个方案能赚取更多利润。,首先可以肯定,这家工厂肯定不会把设备和原材料按照进货原价转让给另一家工厂(否则,还不如自己组织生产,获取利润27500元。也就是说,两家工厂彼此都了解这些生产资料的成本,两家工厂最终达成协议,在成本价的基础上,每种生产资料增加租金(转让代价)为y1,y2,y3。及工厂把设备每小时再增加y1元,原料A再增加y2元/kg,原料B再增加y3元/小时。那么y1,y2,y3满足什么条件,工厂才愿意出让资料呢?再来看看表格:,工厂本身可以用1小时设备,2kg原料A,0kg原料B可以生产获利50元,则这些量的资料组合出租,获取的利润也不应低于50元。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1