实验二利用Lingo求解整数规划及非线性规划问题
LINGO软件求解整数规划问题
2012——2013学年第一学期合肥学院数理系实验报告课程名称:运筹学实验项目: LINGO软件求解整数规划问题实验类别:综合性□设计性□√验证性□专业班级: 10数学与应用数学(1)班姓名:学号:实验地点:实验时间:指导教师:成绩:一.实验目的1、学会使用LINGO 软件求解整数规划问题。
2、学会分析LINGO 软件求解的结果。
二.实验内容1、某班有男同学30人,女同学20人,星期天准备去植树。
根据经验,一天中,男同学平均每人挖坑20个,或栽树30棵,或给25棵树浇水,女同学平均每人挖坑10个,或栽树20棵,或给15棵树浇水。
问应怎样安排,才能使植树(包括挖坑、栽树、浇水)最多。
建立该问题的数学模型,并求其解。
2、求解线性规划:121212212max 2251228010,Z x x x x x x x x x =++≥⎧⎪+≤⎪⎨≤≤⎪⎪⎩全为整数3、在高校篮球联赛中,我校男子篮球队要从8名队员中选择平均身高最高的出场阵容,队员的号码、身高及擅长的位置如右表:同时,要求出场阵容满足以下条件: (1) 中锋最多只能上场一个。
(2)至少有一名后卫 。
(3)如果1号队员和4号队员都上场, 则6号队员不能出场(4)2号队员和6号队员必须保留一个不出场。
问应当选择哪5名队员上场,才能使出场队员平均身高最高?试写出上述问题的数学模型,并求解。
三. 模型建立1、设需要男生挖坑1x 人,栽树2x 人,浇树3x 人;需要女生挖坑4x 人,栽树5x 人,浇树5x 人,则该问题的数学模型建立如下:1212345614252536123456max 201030202010302030202515,,,,,0Z x x x x x x x x x x x x x x x xx x x x x x =+++=⎧⎪++=⎪⎪+=+⎨⎪+=+⎪⎪≥⎩且全为整数2、模型略3、设1=j x 表示第j 号队员上场,0=j x 表示第j 号队员不上场,其中,82,1,,⋯=j ,其中,j c 表示第j 号队员的身高,82,1,,⋯=j 。
应用lingo软件实现线性规划和整数规划
一、 实验目的应用lingo 软件实现线性规划和整数规划。
二、 实验内容:1.线性规划方法的lingo 软件实现。
2.整数规划方法的Lingo 软件实现三、 实验环境:1 硬件要求:计算机一台2 操作系统:WindowsXP3 软件要求:lingo10四、实验步骤及程序编写:1.线性规划模型。
某战略轰炸机群奉命摧毁敌人军事目标。
已知该目标有四个要害部位,只要摧毁其中之一即可达到目的。
为完成此项任务的汽油消耗量限制为48000升、重型炸弹48枚、轻型炸弹32枚。
飞机携带重型炸弹时每升汽油可飞行2千米,带轻型炸弹时每升汽油可飞行3千米。
又知每架飞机每次只能装载一枚炸弹,每出发轰炸一次除来回路程汽为了使摧毁敌方军事目标的可能性最大,应如何确定飞机轰炸的方案。
解:设用了x 枚重型炸弹,用了y 枚轻型炸弹,攻击的是第i 个部位,再设一标志变量f 定义如下: ⎩⎨⎧=个部位不攻击第个部位攻击第i i f i 01目标函数为: ()[]∑=⨯⨯+⨯=41max i i li ih f p y px()()480002004/3/2004/2/≤++⨯+++⨯i i i i d d y d d x48≤x ,32≤y141=∑=i if2、整数规划模型。
某厂生产甲、乙两种产品,生产甲种产品每件要消耗煤9t ,电力4kw ,使用劳动力3个,获利70元;生产乙种产品每件消耗煤4t ,电力5kw ,使用劳动力10个,获利120元。
有一个生产日,这个厂可动用的煤是360t ,电力是200kw ,劳动力是300个,问应该如何安排甲、乙两种产品的生产,才能使工厂在当日的获利最大,并问该厂当日的最大获利是多少? 解:模型建立:⎪⎪⎩⎪⎪⎨⎧<+<+<++=取整x x x x x x x x x x t s f 2121212121,3001032005436049..12070max五、程序调试及实验总结1.线性规划模型。
用LINGO解决非线性规划问题
8
二、用LINGO解决基本的线性规划问题
我们编辑程序并求解后,得到LINGO Model窗口、 Solution report窗口和Solver status窗口划问题
通过此例我们对LINGO有了一个基本的认识,下 面我们来总结一下LINGO语法规定: 1. 求目标函数的最大值或最小值分别用MAX=…… 或MIN=……来表示; 2. 每个语句必须以分号“;”结束,每行可以有多 个语句,语句可以跨行; 3. 变量名称必须以字母(A-Z)开头,由字母、数 字(0-9)和下划线所组成,长度不超过32个字符,不 区分大小写;
11
二、用LINGO解决基本的线性规划问题
8. 变量界定函数: @BND(L,x,U),即L<=x<=U; 注意:没有想象中的的@SLB函数与@SUB函数; @BIN(x),限制x仅取整数0或1; 注意:不是@INT(x)函数; @FREE(x),取消对x的符号限制;
@GIN(x),限制x仅取非负整数。
16
三、用LINGO解决非线性规划问题
17
三、用LINGO解决非线性规划问题
18
三、用LINGO解决非线性规划问题
例4 求解二次规划问题:
直接使用LINGO最大化过程:
max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1 + x2 <= 100; x1 <= 2*x2; @gin(x1);@gin(x2);
12
三、用LINGO解决非线性规划问题
例2 求解二次规划问题:
MODEL: MIN=x^2+y^2-2*x-4*y; !目标函数; x+y<=1; !x,y为决策变量; y<=0.5; !第二、三行均为约束条件; end
实验二、利用Lingo求解整数规划及非线性规划问题
三、Lingo 循环编程举例
例5
sets: ren/A,B,C,D,E/:rent; job/1..5/:jobt; link(ren,job):time; endsets
!定义集合;
data: time=1,0.5,2,1.75,4
2,1,3,1.5,3.5 1.75,1.5,2.5,1,3 2.5,2,1.5,0.5,4 1,1.5,2,2,3; enddata
例 3 用Lingo软件求解非线性规划问题
min z x1 12 x2 22
x2 x1 1,
x1
x2
2,
x1
0,
x2
0.
Lingo 程序: min=(x1-1)^2+(x2-2)^2;
x2-x1=1;
x1+x2<=2;
注意: Lingo 默认变量的取值从0到正无穷大, 变量定界函数可以改变默认状态. @free(x): 取消对变量x的限制(即x可取任意实数值)
maxE=@max(students(i):English); !英语的最高分; averageM=@sum(students(i):Math)/4; !数学的平均分; @for(students(i):total(i)=Math(i)+English(i));
!每个学生数学与英语分数之和.
(4) 衍生集合的定义. 包括如下参数:
@for(yshu(j):@sum(bliang(i):x(i)*c(j,i))<=b(j));
!约束条件;
例6、指派问题
公司在各地有4项业务,选定了4位业务员去处理。由于 业务能力、经验和其它情况不同,4业务员去处理4项业 务的费用(单位:元)各不相同,见下表:
非线性整数规划模型(LINGO代码实现)
⾮线性整数规划模型(LINGO代码实现)⾮线性整数规划模型LINGO讲解分析:第⼀步:确定决策变量问题是确定调运⽅案,使得总运输费⽤最⼩。
⽽总运输费⽤=货物运量*货物单价,题⽬给了货物单价了,我们求货物运量即可,这⾥的货物运量则是我们的决策变量。
第⼆步:确定⽬标函数和约束条件上图第⼀⾏就是我们的⽬标函数,下⾯三⾏是我们的约束条件,在满⾜约束条件的前提下,软件会不断遍历Xij所有可能的值,然后z也会根据Xij的变化⽽产⽣不同的值,这个时候⽤⼀个min函数取所有可能值当中的最⼩值,即可。
第三步:⽤LINGO代码实现model:title 最少运费问题;sets:!集合的定义,WH是集合的名字,W1..W6是集合的长度,⼀般写成1..6,相当于创建了⼀个能放六个元素的容器WH,是抽象的,是虚⽆的,是⼀种声明,告诉我们“:”后⾯的变量是⼀个什么类型的变量,显然,后⾯的AI是⼀个确确实实有六个数的数组,是具体的,是实在WH/W1..W6/:AI;!集合的名称、集合内的成员、集合的属性(可以看成是与改集合有关的变量或常量,相当与数组);VD/V1..V8/:DJ;links(WH,VD):C,X;!以WH和VD为基础,衍⽣集合。
相当于把两个向量结合在⼀起,形成⼀个⼆维数组,有⾏和列,C和X这两个变量是实在的具体的⼆维数组,只不过后⾯C我们赋值了,X是通过系统根据约束条件和⽬标函数⾃⼰赋值的;endsetsdata:!数据段;AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;C=6,2,6,7,4,2,5,94,9,5,3,8,5,8,25,2,1,9,7,4,3,37,6,7,3,9,2,7,12,3,9,5,7,2,6,55,5,2,2,8,1,4,3;enddatamin=@sum(links(I,J):c(i,j)*x(i,j)); !⽬标函数.links我们上线提到了,是⼀个6X8的集合名;@for(WH(i):@sum(VD(j):x(i,j))<=AI(I));!约束条件.@for⼀出,你就要知道这⼀⾏写的就是约束条件了;@for(vd(j):@sum(WH(i):x(i,j))=DJ(j));!约束条件.;end。
用LINGO解决非线性规划问题
一、LINGO介绍
LP QP ILP IQP PILP
PIQP
NLP INLP PINLP
LINGOV12.0版可用于求以下各类最优化数学模型: Linear Program 线性规划 Quadratic Program 二次规划 Integer Linear Program 整数线性规划 Integer Quadratic Program 整数二次规划
X1+ 3*X2<=18;
!X1,X2为决策变量;
2*X1+ X2<=16;
4*X2<=20; !第二到四行均为约束条件
8
二、用LINGO解决基本的线性规划问题 我们编辑程序并求解后,得到LINGO Model窗口、Solution report窗口和Solver status窗口如下:
9
二、用LINGO解决基本的线性规划问题 通过此例我们对LINGO有了一个基本的认识,下面我们来总结一下LINGO语法规定: 1. 求目标函数的最大值或最小值分别用MAX=……或MIN=……来表示; 2. 每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行; 3. 变量名称必须以字母(A-Z)开头,由字母、数字(0-9)和下划线所组成,长度不超过32个字符,不
三、用LINGO解决非线性规划问题
例4 求解二次规划问题:
直接使用LINGO最大化过程: max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1 + x2 <= 100; x1 <= 2*x2; @gin(x1);@gin(x2); 19
三、用LINGO解决非线性规划问题 20
6
二、用LINGO解决基本的线性规划问题
用Lingo求解整数(0-1)规划模型.
Lingo 程序: max=2*x1+5*x2+3*x3+4*x4;
-4*x1+x2+x3+x4>=0; -2*x1+4*x2+2*x3+4*x4>=1; x1+x2-x3+x4>=1; @bin(x1);@bin(x2);@bin(x3);@bin(x4);
温州大学城市学院
例 2 用Lingo软件求解整数规划问题 min z 2 x1 5 x2 3 x3
温州大学城市学院
注意:
Lingo 默认变量的取值从0到正无穷大,
变量定界函数可以改变默认状态.
@free(x): 取消对变量x的限制(即x可取任意实数值)
例 4 求函数 z x 2 y 2 的最小值.
2 2
温州大学城市学院 例 4 求函数 z x 2 y 2 的最小值.
,8
温州大学城市学院
温州大学城市学院
上机作业题
要求:
1、建立数学模型,
2、用lingo循环语句编写程序.
温州大学城市学院
上机作业题
人员安排问题
某城市的巡逻大队要求每天的各个时间段都有一 定数量的警员值班, 以便随时处理突发事件, 每人连续 工作6h, 中间不休息. 如表所示是一天8个班次所需值 班警员的人数情况统计:
成绩 甲 乙 丙 丁 自由泳 / s 56 63 57 55 蛙泳 / s 74 69 77 76 蝶泳 / s 61 65 63 62 仰泳 / s 63 71 67 62
甲, 乙, 丙, 丁 四名队员各自游什么姿势 , 才最有可能取得好成绩?
温州大学城市学院
实验二、利用Lingo求解整数规划及非线性规划问题
建立数学模型
根据问题要求,建立相应的数 学模型,包括变量、约束条件 和目标函数等。
设置求解参数
根据问题类型和规模,设置合 适的求解参数,如求解方法、 迭代次数等。
分析结果
对求解结果进行分析,验证模 型的正确性和可行性。
05 整数规划问题求解实例
问题描述
问题背景
本实验将通过一个具体的整数规划问题,展示如 何利用LINGO软件进行求解。该问题涉及到生产 计划优化,目标是最大化利润,同时满足一系列 约束条件。
非线性规划问题在数学、经济、工程等领域有广泛应用,是 优化理论的重要分支。
非线性规划问题的分类
01
按照目标函数的性质,非线性规划问题可以分为凸规
划和凹规划。
02
按照约束条件的性质,非线性规划问题可以分为无约
束、有界约束和等式约束三种类型。
03
按照决策变量的个数,非线性规划问题可以分为单变
量和多变量规划。
定义约束条件
使用LINGO的FROM命令定义约束条件,例 如FROM ... >= ... (P1,P2,...,Pn)。
LINGO求解过程及果分析
求解过程
在LINGO中输入模型,选择求解器类型(整数求解器或线性求解器),设置参数,运行求解过程。
结果分析
查看求解结果,包括最优解、最优值、松弛解等信息。对结果进行解释和评估,分析其对实际问题的 指导意义。
07 实验总结与展望
实验收获与体会
掌握整数规划和非线性规划的基本概念和求解方法
通过实验,我深入了解了整数规划和非线性规划的基本概念和求解方法,包括数学模型 建立、约束条件处理、目标函数处理等。
熟练使用LINGO软件
通过实验,我掌握了LINGO软件的基本操作和参数设置,能够利用LINGO软件求解整 数规划和非线性规划问题。
用Lingo软件编程求解规划问题
x2桶牛奶生产A2 获利 16×4 x2
Max z 72 x1 64 x2
x1 x2 50
12 x1 8x2 480 3x1 100
x1, x2 0
线性规 划模型 (LP)
例1——加工奶制品的生产计划
x1 x2 50
12
x1 8x2 480 3x1 100
Lingo软件——基本集合元素的列举
一个原始集是由一些最基本的对象组成的。 setname [/member_list/] [: attribute_list];
sets: students/John Jill, Rose Mike/: sex, age;
endsets
集、集成员和集属性
• 集成员无论用何种字符标记,它的索引都是 从1开始连续计数。
ij
8
j 1
N Nij
V
i
i 1, ,6,j 1, ,8, i 1, ,6,
N 6
i1 ij
d
j
j 1, ,8.
结果
Lingo软件
Lingo 是一个可以简洁地阐述、解决和分析复杂问题的简便工具。
其特点是程序执行速度很快,易于输入、修改、求解和分析一个数 学规划问题。
N 6
i1 ij
d
j
j 1, ,8.
corps
需求量 35 37 22 32 41 32 43 38
拥有量
60 55 51 depot 43 41 52
B1 B2 B3 B4 B5 B6 B7 B8
A1
62674259
A2
49538582
lingo解非线性规划
在LINGO中使用LINDO模型
优化建模
④ 运行程序的LINGO报告窗口(如下图)
注:LINGO不询问是否进行敏感性分析,敏感性分析 需要将来通过修改系统选项启动敏感性分析后,再调 用“REPORT|RANGE”菜单命令来实现。现在同样可 以把模型和结果报告保存在文件中。
优化建模
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
Max98x127x72x120.3x1x22x22 1
s.t. x1x2100
2
x12x2
3
x1,x20 为整数
4
输入窗口如下:
程序语句输入的备注:
max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2;
优化建模
•LINGO总是根据“MAX=”或“MIN=”寻找目标函数。
IN(V0)10
加上变量的非负约束
优化建模
注:LINDO中没有数组,只能对每个季度分别定义变量, 如正常产量就要有RP1,RP2,RP3,RP4 4个变量等。 写起来就比较麻烦,尤其是更多(如1000个季度)的时候。
记四个季度组成的集合QUARTERS={1,2,3,4}, 它们就是上面数组的下标集合,而数组DEM,RP,OP, INV 对集合QUARTERS中的每个元素1,2,3,4分别对应于 一个值。LINGO正是充分利用了这种数组及其下标的关 系,引入了“集合”及其“属性”的概念,把 QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP, INV称为该集合的属性(即定义在该集合上的属性)。
集合及其属性
• QUARTERS集合的属性
• DEM
• RP
优化建模
用LINGO求解整数规划
用LINGO求解整数规划在LINGO中,输入总是以model:开始,以end结束;中间的语句之间必须以“;”分开;LINGO不区分字母的大小写;目标函数用MAX=…;或MIN=…;给出(注意有等号“=”)。
在LINDO中所有的函数均以“@”符号开始,如约束中@gin(x1)表示x1为整数,用@bin(x1)表示x1为0-1整数。
在现在的LINDO中,默认设置假定所有变量非负。
函数中变量的界定:@GIN(X):限制X为整数@BIN(X):限定变量X为0 或1。
@FREE(X):取消对x的符号限制(即可取任意实数包括负数)@BND(L,X,U):限制L<= X <= ULINGO提供了大量的标准数学函数:@abs(x)???????????? 返回x的绝对值@sin(x)???????????? 返回x的正弦值,x采用弧度制@cos(x)???????????? 返回x的余弦值@tan(x)???????????? 返回x的正切值@exp(x)???????????? 返回常数e的x次方@log(x)???????????? 返回x的自然对数@lgm(x)???????????? 返回x的gamma函数的自然对数@sign(x)??????????? 如果x<0返回-1;否则,返回1@smax(x1,x2,…,xn)? 返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)? 返回x1,x2,…,xn中的最小值例1:整数规划模型在LINGO中可以如下输入:model:Max=5*x1+8*x2;!*号不能省略x1+x2<=6;!约束条件和目标函数可以写在model:与end之间的任何位置5*x1<=45-9*x2;@gin(x1);@gin(x2); !和LINDO不同,不能写在end之后end运行后同样得到最优解为x1=0,x2=5,最优值为40。
例2:在线性规划中的应用max Z =5X1+3X2+6X3,s.t.X1 +2 X2 + X3 ≤182 X1 + X2 +3 X3 =16X1 + X2 + X3 =10X1 ,X2 ≥0 , X3 为自由变量应用LINGO 来求解该模型,只需要在 lingo窗口中输入以下信息即可:max=5*x1+3*x2+6*x3;x1+2*x2+x3<=18;2*x1+x2+3*x3=16;x1+x2+x3=10;@free(x3);然后按运行按钮,得到模型最优解,具体如下:Objective value: 46.00000Variable Value Reduced Costx1 14.00000 0.000000x2 0.000000 1.000000x3 -4 .000000 0.000000由此可知,当 x1 =14 , x2 =0 , x3 =-4 时,模型得到最优值,且最优值为 46。
用Lingo软件编程求解规划问题解决方案
案例背满 足不同产品的需求,并优化资源利用, 实现成本最小化。
问题描述
该公司生产多种产品,每种产品有不 同的需求和资源消耗。目标是确定每 种产品的最优生产量,以最小化总成 本,同时满足需求和资源约束。
Lingo建模与编程实现
决策变量定义
定义每种产品的生产量为决策变量。
02
规划问题建模
问题分析与定义
明确问题背景和目标
01
了解问题的实际背景,确定问题的优化目标,如成本最小化、
收益最大化等。
识别决策变量
02
找出影响目标的关键因素,即决策变量,并确定其取值范围和
类型。
列出约束条件
03
分析问题的限制条件,如资源限制、时间限制等,列出所有约
束条件。
数学模型建立
1 2
选择合适的数学模型 根据问题的特点和目标,选择合适的数学模型, 如线性规划、整数规划、非线性规划等。
代码调试与优化
调试方法
01
输标02入题
在Lingo中,可以使用`@WRITE`等语句输出中间结果, 帮助调试代码。同时,Lingo还提供了错误提示功能, 方便用户定位代码错误。
03
针对大型复杂模型,可以采用以下优化策略:合理划 分模型结构、减少冗余计算、利用Lingo的并行计算
功能等。这些策略可以提高求解速度和准确性。
编程实现步骤与技巧
步骤二
建立目标函数
步骤三
添加约束条件
编程实现步骤与技巧
编程实现步骤与技巧
步骤四
运行求解
技巧一
合理设置变量类型
编程实现步骤与技巧
根据问题的实际情况,合理设置变量的类型(如整数、非负等),可以提 高求解效率和准确性。
lingo解非线性规划
课堂练习: 求解下列模型
max z x1 x2 ;
2 x1 x2 6 ;
4 x1 5x2 20 ;
x1
,
x
2
0, 且为整数
优化建模
min st
f (x1, x2) (x1 3)2 (x2 2)2 x12 x22 5 0 x1 2x2 4 0 x1, x2 0
min st
f (x1,x2)(x11)2 (x2 1)2 x12 x22 20
x2 10
优化建模
二、集合的基本用法和LINGO模型的基本要素 理解LINGO建模语言最重要的是理解集合(Set)及其 属性(Attribute)的概念。
例 SAILCO公司需要决定下四个季度的帆船生优 化产建量模。下 四个季度的帆船需求量分别是40条,60条,75条,25条, 这些需求必须按时满足。每个季度正常的生产能力是40 条帆船,每条船的生产费用为400美元。如果加班生产, 每条船的生产费用为450美元。每个季度末,每条船的 库存费用为20美元。假定生产提前期为0,初始库存为 10条船。如何安排生产可使总费用最小?
@gin(x1);@gin(x2);
•限定变量取整数值的语句为“@GIN(X1)”和 “@GIN(X2)”
•LINGO中函数一律需要以“@”开头。
@BIN(x)—限定变量x为0/1变量函数
@FREE(x)—设定变量x的取值范围为实数。
注意:如果0/1变量的个数很多,还可以采用循环语句设 定。
优化建模
如果有一个接近最优解的初值,对LINGO求解模型是 有帮助的。定义初值的格式为:
“attribute(属性) = value_list(常数列表);”
这与数据段中的用法是类似的。
用LINGO求解整数规划
用LINGO求解整数规划| [<<][>>]LINGO软件用于线性或非线性规划(无论是连续规划还是整数规划),因此包含了LINDO的功能。
在LINGO中,输入总是以model:开始,以end结束;中间的语句之间必须以“;”分开;目标函数用MAX=…;或MIN=…;给出(注意有等号“=”)。
在LINDO中所有的函数均以“@”符号开始,如约束中@gin(x1)表示x1为整数,用bin (x1)表示x1为0-1整数。
在现在的LINDO中,默认设置假定所有变量非负。
例如,例2中的整数规划模型在LINDO中可以如下输入:model:x1+x2<=6; !约束条件和目标函数可以写在model:与end 之间的任何位置Max=5*x1+8*x2;!*号不能省略5*x1<=45-9*x2;@gin(x1);@gin(x2);!和LINDO不同,不能写在end之后end运行后同样得到最优解为x1=0,x2=5,最优值为40。
说明,即使是线性规划,在LINDO中书写格式非常严格,约束也只能一个一个输入,因此输入一个大规模的模型是比较困难的。
而L INGO不仅能解非线性模型,书写格式相当自由,而且有一个非常大的优点,即LINGO实际上提供了数学规划模型的一种建模描述语言,输入一个大规模的模型也是很方便的。
LINGO中还包括相当丰富的数学函数和控制语句,并可以直接利用其他应用系统提供的数据文件或数据库。
钢管下料问题(1)的求解将式(1),式(3)~(6)构成的线性整数规划模型输入LIND O如下:min 3x1+x2+3x3+3x4+x5+x6+3x7s.t4x1+3x2+2x3+x4+x5>=50x2+2x4+x5+3x6>=20x3+x5+2x7>=15ENDgin7求解可以得到最优解如下:OBJECTIVE FUNCTION VALUE1) 27.00000VARIABLE VALUE REDUCED COSTX1 0.000000 3.000000X2 12.000000 1.000000X3 0.000000 3.000000X4 0.000000 3.000000X5 15.000000 1.000000X6 0.000000 1.000000X7 0.000000 3.000000即按照模式2切割12根原料钢管,按照模式5切割15根原料钢管,共27根,总余料量27m。
用LINGO求解整数规划
用LINGO求解整数规划在LINGO中,输入总是以model:开始,以end结束;中间的语句之间必须以“;”分开;LINGO不区分字母的大小写;目标函数用MAX=…;或MIN=…;给出(注意有等号“=”)。
在LINDO中所有的函数均以“@”符号开始,如约束中@gin(x1)表示x1为整数,用@bin(x1)表示x1为0-1整数。
在现在的LINDO中,默认设置假定所有变量非负。
函数中变量的界定:@GIN(X):限制X为整数@BIN(X):限定变量X为0 或1。
@FREE(X):取消对x的符号限制(即可取任意实数包括负数)@BND(L,X,U):限制L<= X <= ULINGO提供了大量的标准数学函数:@abs(x)???????????? 返回x的绝对值@sin(x)???????????? 返回x的正弦值,x采用弧度制@cos(x)???????????? 返回x的余弦值@tan(x)???????????? 返回x的正切值@exp(x)???????????? 返回常数e的x次方@log(x)???????????? 返回x的自然对数@lgm(x)???????????? 返回x的gamma函数的自然对数@sign(x)??????????? 如果x<0返回-1;否则,返回1@smax(x1,x2,…,xn)? 返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)? 返回x1,x2,…,xn中的最小值例1:整数规划模型在LINGO中可以如下输入:model:Max=5*x1+8*x2;!*号不能省略x1+x2<=6;!约束条件和目标函数可以写在model:与end之间的任何位置5*x1<=45-9*x2;@gin(x1);@gin(x2); !和LINDO不同,不能写在end之后end运行后同样得到最优解为x1=0,x2=5,最优值为40。
例2:在线性规划中的应用max Z =5X1+3X2+6X3,s.t.X1 +2 X2 + X3 ≤182 X1 + X2 +3 X3 =16X1 + X2 + X3 =10X1 ,X2 ≥0 , X3 为自由变量应用LINGO 来求解该模型,只需要在 lingo窗口中输入以下信息即可:max=5*x1+3*x2+6*x3;x1+2*x2+x3<=18;2*x1+x2+3*x3=16;x1+x2+x3=10;@free(x3);然后按运行按钮,得到模型最优解,具体如下:Objective value: 46.00000Variable Value Reduced Costx1 14.00000 0.000000x2 0.000000 1.000000x3 -4 .000000 0.000000由此可知,当 x1 =14 , x2 =0 , x3 =-4 时,模型得到最优值,且最优值为 46。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例 3 用Lingo软件求解非线性规划问题
min z x1 12 x2 22
x2 x1
x1 x2
1, 2,
x1
0,
x2
0.
Lingo 程序: min=(x1-1)^2+(x2-2)^2;
x2-x1=1;
x1+x2<=2;
注意: Lingo 默认变量的取值从0到正无穷大, 变量定界函数可以改变默认状态. @free(x): 取消对变量x的限制(即x可取任意实数值)
Lingo 程序:
max=2*x1+5*x2+3*x3+4*x4; -4*x1+x2+x3+x4>=0; -2*x1+4*x2+2*x3+4*x4>=1; x1+x2-x3+x4>=1; @bin(x1);@bin(x2);@bin(x3);@bin(x4);
例 2 用Lingo软件求解整数规划问题
三、Lingo 循环编程举例
例5
sets: ren/A,B,C,D,E/:rent; job/1..5/:jobt; link(ren,job):time; endsets
实验二 利用Lingo求解整数规划及非线性规划问题
实验目的:
1、掌握线性整数规划模型在lingo中的求解,并能达到 灵活运用。
2、学会用Lingo对非线性规划问题进行求解。
实验二 利用Lingo求解整数规划及非线性规划问题
变量定界函数: @bin(x): 限制 x 为 0 或 1. @gin(x): 限制 x 为整数.
maxE=@max(students(i):English); !英语的最高分; averageM=@sum(students(i):Math)/4; !数学的平均分; @for(students(i):total(i)=Math(i)+English(i));
!每个学生数学与英语分数之和.
(4) 衍生集合的定义. 包括如下参数:
sets: endsets
students
命名规则: 以字母开头, 后面是字母或下划线.
字母不区分大小写.
2) 集合包含的元素(可选). John, Jill, Rose, Mike 3) 集合中元素的所有属性(可选). Math,English,total
例4 sets:
students/John, Jill, Rose, Mike/:Math,English,total; endsets
1) 衍生集合的名称. link
2) 衍生集合的父集合名称. ren job
3) 衍生集合包含的元素(可选).
注: 若没有指明元素列 表, LINGO将用父集合 元素的所有组合作为衍 生集合的元素.
(A,1), (A,2),(A,3),(A,4)(A,5) (B,1), (B,2),(B,3),(B,4)(B,5) (C,1), (C,2),(C,3),(C,4)(C,5) (D,1), (D,2),(D,3),(D,4)(D,5)
min z 2 x1 5 x2 3 x3
4 x1 x2 x
4
x2
2
x3
2
x1
x2
x3
2
xi 0 且 取 整 数 , i 1, 2, 3
Lingo 程序:
min=2*x1+5*x2+3*x3; -4*x1-x2+x3>=0; -2*x1+4*x2-2*x3>=2; x1-x2+x3>=2; @gin(x1);@gin(x2);@gin(x3);
三、Lingo 循环编程举例
例5 现有五名工人甲, 乙, 丙, 丁, 戊, 完成五项 工作A, B, C, D, E, 所需时间列表如下
工作
时间(小时) A
B
C
D
E
工人
甲
1 0.5
2
1.75
4
乙
2
1
3
1.5 3.5
丙
1.75 1.5 2.5
1
3
丁
2.5 2
1.5 0.5
4
戊
1
1.5
2
2
3
问题: (1) 求每个人的最短工作时间; (2) 求每份工作最短的用时.
例 4 求函数 zx22y22的最小值.
例 4 求函数 zx22y22的最小值.
解: 编写Lingo 程序如下:
min=(x+2)^2+(y-2)^2; @free(x); 求得结果: x=-2, y=2
二、Lingo 循环编程语句
(1) 集合的定义 包括如下参数: 1) 集合的名称.
(1) 集合的定义
例4 sets:
students/John, Jill, Rose, Mike/:Math,English,total; endsets
(2) 数据赋值
格式: data:
enddata
例4 data:
Math=80,85,90,70; English=75,80,72,60; enddata
4) 集合中元素的所有属性(可选). time
例5 sets:
ren/A,B,C,D/: rent; job/1..5/: jobt; link(ren,job): time; endsets
(5) Lingo 内部的数学函数及其返回值 @abs(x): 返回x的绝对值 @sin(x): 返回x的正弦值 @cos(x): 返回x的余弦值 @tan(x): 返回x的正切值 @log(x): 返回x的自然对数值 @exp(x): 返回ex的值 @sqr(x): 返回x的平方值. 该函数可以用表达式x^2代替 @sqrt(x): 返回x的正的平方根. 可以用表达式x^(1/2)代替
一、用Lingo 求解规划问题
例 1 用Lingo软件求解0-1规划问题
max z 2 x1 5 x2 3 x3 4 x4
4 x1 x2 x3 x4 0
2
x1
4
x2
2
x3
4 x4
1
x1
x2
x3
x4
1
x1 , x2 , x3 , x4 0 或 1
(3) 集合的循环函数 集合的循环函数可以使所有的元素重复完成一些操作.
函数 @for @sum @min @max
函数功能 形成集合所有元素需满足的约束条件
计算集合中元素所在表达式的和 计算集合中元素所在表达式的最小值 计算集合中元素所在表达式的最大值
例4 maxM=@max(students(i):Math); !数学的最高分;