LindoLingo软件基本知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Lindo /Lingo 软件基本知识

Lindo/Lingo 软件是美国Lindo 系统公司开发的一套专门用于求解优化模型的软件。

一.Lingo 入门

1.编写简单的Lingo 程序

Lingo 程序:在“模型窗口”中,按Lingo 语法格式,输入一个完整的优化模型。 (注意:一个程序就是一个优化模型)

例1 要求解线性规划问题 .

0,,1253,

1034..,32max ≥≤+≤++=y x y x y x t s y x z

输入程序: max=2*x+3*y; 4*x+3*y<=10; 3*x+5*y<=12;

例2 求解

.

,0,,

2,

100..,

23.027798max 2121212

2212121且都是整数≥≤≤+---+x x x x x x t s x x x x x x

输入程序:

max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1<=2*x2;x1+x2<=100; @gin(x1); @gin(x2);

2.语法格式

(1)目标函数 max= 或 min= (2)每个语句的结尾要有“;”

(3)程序中,各个语句的先后次序无关

(4)自动默认各个变量均为大于等于零的实数 (5)不区分大写、小写 (6)程序中的“<=”、“<”等同于原模型中的“≤” 程序中的“>=”、“>”等同于原模型中的“≥” (7)对一个特定的变量 x ,进行限制: @free(x) :把x 放宽为任意实数

@gin(x) :限制x 为整数

@bin(x) :限制x 只能取0或1

@bnd(-6,x,18) :限制x 为闭区间[-6,18]上的任意实数

例3:某学校游泳队要从5名队员中选4名参加4乘100米混合泳接力赛。

5名队员4种泳姿的百米成绩(单位:秒)

-----------------------------------------------------------------------------------

李 王 张 刘 赵 蝶泳 66.8 57.2 78 70 67.4 仰泳 75.6 66 67.8 74.2 71 蛙泳 87 66.4 84.6 69.6 83.8 自由泳 58.6 53 59.4 57.2 62.4

----------------------------------------------------------------------------------- 如何选拔?

(1)请建立“0----1规划”模型; (2)用Lingo 求解。

解:若第i 名队员参加第j 种泳姿比赛,则令1=ij x ;否则令0=ij x ;共有20

个决策变量ij x 。第i 名队员的第j 种泳姿成绩记为ij c ,则 目标函数为:∑∑==514

1

min

i j ij

ij x

c

约束条件有:每名队员顶多能参加一种泳姿比赛

5,4,3,2,1,14

1

=≤∑=i x

j ij

每种泳姿有且仅有一人参加

.4,3,2,1,15

1

==∑=j x

i ij

这样就能建立如下“0----1规划”模型:

∑∑==514

1

min

i j ij

ij x

c

s.t.

5,4,3,2,1,14

1

=≤∑=i x

j ij

.4,3,2,1,15

1

==∑=j x

i ij

.4,3,2,1,5,4,3,2,1,10===j i x ij 或

Lingo 程序如下:

min=66.8*x11+57.2*x21+78*x31+70*x41+67.4*x51+75.6*x12+66*x22+67.8*x 32+74.2*x42+71*x52+87*x13+66.4*x23+84.6*x33+69.6*x43+83.8*x53+58.6*x 14+53*x24+59.4*x34+57.2*x44+62.4*x54; x11+x12+x13+x14<=1; x21+x22+x23+x24<=1; x31+x32+x33+x34<=1; x41+x42+x43+x44<=1; x51+x52+x53+x54<=1; x11+x21+x31+x41+x51=1; x12+x22+x32+x42+x52=1; x13+x23+x33+x43+x53=1; x14+x24+x34+x44+x54=1;

@bin(x11); @bin(x21); @bin(x31); @bin(x41); @bin(x51); @bin(x12); @bin(x22); @bin(x32); @bin(x42); @bin(x52); @bin(x13); @bin(x23); @bin(x33); @bin(x43); @bin(x53); @bin(x14); @bin(x24); @bin(x34); @bin(x44); @bin(x54);

答:14433221,,,x x x x 均等于1,即,依次取第2个人王、第3个人张、第4个

人刘、第1个人李参加蝶泳、仰泳、蛙泳、自由泳,成绩为253.2秒。

再介绍本题的另一个解法:用遍历法求出最佳组队方案。从5人中任取4人,随意安排各人的泳姿,则共有 5!=120 种方案,取成绩最佳的方案。Matlab 程序为 clear

c=[66.8,75.6,87,58.6;57.2,66,66.4,53;78,67.8,84.6,59.4;70,74.2,69.6,57.2;67.4,71,83.8,62.4]; zxcj=888; for a1=1:5

for a2=1:5

for a3=1:5 for a4=1:5

aabb=(a1-a2)*(a1-a3)*(a1-a4)*(a2-a3)*(a2-a4)*(a3-a4); if aabb~=0

cj=c(a1,1)+c(a2,2)+c(a3,3)+c(a4,4); if cj

fa=[a1,a2,a3,a4]; end

相关文档
最新文档