单件作业排序问题的基于lingo软件解法(含代码)

海南大学《数学模型》课程设计题目:单件作业排序问题的基于lingo软件解法班级:信息与计算科学姓名:体贴的瑾色学号:指导教师:舒兴明日期:2017.05单件作业排序问题的基于lingo软件解法摘要关键词:单件工件加工排序 lingo本文针对一个8*5的单件作业排序问题,通过规定加工顺序,后将不满足这个顺序的工件‘拆分’为不同的工件,然后将问题变成了更为简单的流水作业排序问题。

通过引入0-1变量,约束本来同属与一个工件的‘工件’加工顺序建立一个数学规划模型,利用lingo 软件进行模型的求解,得到了使得所有工件都加工完成所需时间最少的排序。

最后针对模型做了一个中肯的评价,并将模型推广到m n的单件作业排序问题。

解决*一、问题分析该问题是一个单件作业排序问题,这是一般的工件排序问题,也是最复杂的工件排序问题,即每一个工件都有自己独特的加工路线,工件没有一定的流向,这类排序问题暂时还没有一种很好的解决方案。

而与之区别的一种工件排序问题是流水作业排序问题,最大的不同就是流水作业排序中在不同的工件在多个机床上的加工顺序是一致的情况下也能够找到最优解或者近似最优解,这类问题往往能得到比较好的解决。

本问题对工件在不同机床上加工的顺序做了限制,而且一个工件可能多次在同一个机床上加工,使得问题比较复杂,而如果我们规定工件在机床上加工的顺序只能为A-B-C-D-E,且若某个工件不满足这个顺序就将其看为多个符合顺序的工件组合。

比如问题中的工件1加工顺序为A-B-A-C-D-E,在第三道工序不满足规定的顺序,那么就将其拆分为加工顺序为A-B—C-D-E和A-B-C-D-E的两个工件1.1和1.2,其中工件1.2必须在工件1.1全部加工完成后才可以进行加工,并且工件1.1的CDE三道工序加工时间都为0,工件1.2的工序B加工时间为0。

如此该问题就变成了一个20个工件在5个机床上加工的流水作业排序问题。

变换后的加工时间表为(为了方便处理,将变换后的零件仍然以自然数编号,单位为h):这样只要决定了每个工件在每个机床的初始时刻,顺序一旦确定,每个工件在每个机床的加工终止时刻都完全确定,也就能决定最后八批货物的最后交货时间了。

二、符号说明1,2,...,20i = 表示20个工件;1,2,...,5j = 表示5个机床;(,)x i j 表示第i 个工件在第j 个机床的初始加工时间;(,)t i j 表示第i 个工件在第j 个机床的所需加工时间;1(,)0i k y i k i k ⎧=⎨⎩工件在工件前加工,i<k;工件在工件后加工tt 表示所有工件都加工完成后的时间(默认最先加工的工件初试加工时间为0)。

三、模型假设(1)、一个工件不能同时在不同的机床上加工。

(2)、一个工件的一个工序完成后立刻完成下一个工序,中间没有时间延误。

(3)、一个机床开始一道工序后必须一直工作知道这个工序完成。

(4)、一个机床同时只能进行一道工序。

四、模型建立目标函数:min tt{}max (,5)(,5),1,2,...,20tt x i t i i =+=等价于: (,5)(,5),1,2,...,20tt x i t i i ≥+=因为加工时间不可能小于每个机床运行的最小时间,所以由加工时间表知:69;tt ≤每个工件的加工顺序约束:(,)(,)(,1),1,2,...,20,1,2,3,4x i j t i j x i j i j +≤+==不同工件的加工顺序约束(M是充分大的整数,本题取200):(,)(,)(,)(1(,)),1,2,..,20,(,)(,)(,)(,),x i j t i j x k j M y i k i i k x k j t k j x i j My i k +≤+-⎧=<⎨+≤+⎩ 原属同一个工件的顺序约束:x(1,2)+t(1,2)<=x(2,1);x(11,5)+t(11,5)<=x(12,1);x(3,2)+t(3,2)<=x(4,1);x(12,4)+t(12,4)<=x(13,3);x(4,5)+t(4,5)<=x(5,3);x(13,3)+t(13,3)<=x x(5,3)+t(5,3)<=x(6,1);x(7,5)+t(7,5)<=x(8,2);x(8,2)+t(8,2)<=x(9,1);(14,2);x(14,2)+t(14,2)<=x(15,1);x(18,5)+t(18,5)<=x(19,1); x(19,4)+t(19,4)<=x(20,1); 变量约束:(,)0,1,2,,20,1,2,3,4,5x i j i j ≥==Ly(i,k){0,1},1,2,...,20,i i k ∈=<(,)(,)1y i k y k i +=y(1,2)=1;y(11,12)=1;y(3,4)=1;y(12,13)=1;y(4,5)=1;y(13,14)=1;y(5,6)=1;y(14,15)=1;y(7,8)=1;y(18,19)=1;y(8,9)=1;y(19,20)=1;五、问题解决求解模型后得到最优解:69tt h =结果分析:由该图知道顺序应该为:11->10->3->18->4->1->12->7->5->2->13->17->8->19->16->14->6->9->20->15而回到题目那么顺序应该为(每个工件均按照其加工流程加工):5(E)->4(ABCE)->2(B)->8(ABE)->2(ADE)->1(AB)->5(ABD)->3(ACDE) ->2(C)->1(ACDE)->5(C)->7(ABCDE)->3(B)->8(ACD)->6(ABCDE)->5 (B)->2(AB)->3(AB)->8(A)->5(A)去除了加工时间为0的工序后每个工件的每个步骤的开始时刻和结束时刻为:六、模型评价和推广本模型运用创造性思维将单机排序问题转换成流水排序问题,实现了从繁到简的过程,较好的解决了这个问题,计算出结果的时间也不足两分钟。

不足的地方有本模型限制条件过多,用lingo求解容易输错条件,另外本模型只能针对机床的数量都只有一个的排序问题,不能很好地推广到。

本文解决的问题是针对八个工件五个机床的单机排序问题,推广到一般情况,对m n个工件,具体描述如下:*某加工车间机床种类为n个,数量都为一个,现有m批工件需要加工,每批工件的加工顺序和加工时间如下表所示,试安排机床和工件作业计划,使得尽早完工交货,并求出完工时间。

按照本文的模型,将工件进行‘分解’,给出加工矩阵。

在同样的对条件进行约束即可得到最优解。

七、心得体会通过对上述问题的解决,我最大的收获就是明白了创造性的重要性,本题一个从未见过的很复杂的问题,运用创造性的思维就很轻易的转换成我们做过的问题,十分简便的解决了这个问题。

其次的收获就是改正了一个缺点,那就是编程中总是喜欢给变量随便取名,没有一定的规律性,解决本题的时候因为后期出现了一点问题,然后重新检查程序,因为自己都不知道变量名代表了什么着实耽误了很久。

最后,通过解决这道问题,我对lingo和matlab两个软件都熟悉了很多。

总之,通过这道问题,我可谓是收益匪浅。

参考文献:[1]姜启源,谢金星.数学模型(第四版).北京:高等教育出版社,2011,1.[2]谢金星,薛毅.LINGO软件的基本使用方法.北京:清华大学出版社,2005,1[3]王万雷. 基于遗传算法的车间作业调度问题研究[D].昆明理工大学,2002.附:LINGO程序:sets:jiafang/1..20/:;yifang/1..5/:;mianshi(jiafang,yifang):t,x;shunxu(jiafang,jiafang):y;endsetsdata:t=@OLE('D:\jianmo1.xlsx',data1);enddatamin=tt;tt>69;@for(jiafang(i):tt>=x(i,5)+t(i,5));@for(jiafang(i):x(i,1)+t(i,1)<=x(i,2);x(i,2)+t(i,2)<=x(i,3);x(i,3)+t( i,3)<=x(i,4);x(i,4)+t(i,4)<=x(i,5));@for(yifang(j):@for(shunxu(i,k)|i#lt#k:x(i,j)+t(i,j)<=x(k,j)+200*(1-y (i,k))));@for(yifang(j):@for(shunxu(i,k)|i#lt#k:x(k,j)+t(k,j)<=x(i,j)+200*y(i, k)));@for(shunxu(i,k)|i#lt#k:@bin(y(i,k)));@for(shunxu(i,k)|i#lt#k:y(k,i)+y(i,k)=1);y(1,2)=1;y(3,4)=1;y(4,5)=1;y(5,6)=1;y(7,8)=1;y(8,9)=1;y(11,12)=1;y(12,13)=1;y(13,14)=1;y(14,15)=1;y(18,19)=1;y(19,20)=1;x(1,2)+t(1,2)<=x(2,1);x(3,2)+t(3,2)<=x(4,1);x(4,5)+t(4,5)<=x(5,3);x(5,3)+t(5,3)<=x(6,1);x(7,5)+t(7,5)<=x(8,2);x(8,2)+t(8,2)<=x(9,1);x(11,5)+t(11,5)<=x(12,1);x(12,4)+t(12,4)<=x(13,3);x(13,3)+t(13,3)<=x(14,2);x(14,2)+t(14,2)<=x(15,1);x(18,5)+t(18,5)<=x(19,1);x(19,4)+t(19,4)<=x(20,1);data:@ole('D:jianmo1.xlsx',data2)=Y; @ole('D:jianmo1.xlsx',data3)=X; enddata运行结果:Matlab 程序:clear all; clcload T %t(i,j)load Y_bload X_b[~,col]=size(X);row=length(T);%%排序for i=1:rowtem=find(Y(i,:)==0);su_m(1,i)=length(tem);end[~,order]=sort(su_m);%%输出顺序p=num2str(order(1));for i=2:rowp=[p,'->',num2str(order(i))]; enddisp(['顺序为:',p]);%%按照加工顺序对x(i,j)排序t=(T==0);X(t)=0;%忽略加工时间为0的工序for i=1:colA=X(:,i);ord_X(:,i)=A(order);end%%按照加工顺序对t(i,j)排序for i=1:colA=T(:,i);ord_T(:,i)=A(order);end%%计算x(i,j)+t(i,j)end_t=ord_X+ord_T;jieshu=ones(20,10);lin=0;for i=1:2:2*col;lin=lin+1;jieshu(:,i)=ord_X(:,lin);jieshu(:,i+1)=end_t(:,lin); end。

合集下载

运用lingo解决问题的例子

运用lingo解决问题的例子

运用lingo解决问题的例子
以下是一个运用LINGO解决实际问题的例子:
问题描述:
某公司生产A、B两种产品,已知生产1单位A产品需要3单位原料1和2单位原料2,同时产生2单位废料;生产1单位B产品需要4单位原料1和2单位原料2,同时产生3单位废料。

该公司有10单位原料1和8单位原料2,同时最多可以产生10单位废料。

请为公司制定一个生产计划,使得A、B两种产品的产量最大。

模型建立:
1. 设x1为A产品的产量,x2为B产品的产量。

2. 设原料1的消耗为3x1 + 4x2,原料2的消耗为2x1 + 2x2,废料产生为2x1 + 3x2。

3. 原料1的限制条件为3x1 + 4x2 <= 10,原料2的限制条件为2x1 +
2x2 <= 8,废料的限制条件为2x1 + 3x2 <= 10。

4. 目标函数为max x1 + x2,即最大化A、B两种产品的产量之和。

LINGO代码:
SETS:
I / 1 /;
J / 1,2 /;
K / I,J /;
PARAMETERS:
C(K) / 3I + 4J, 2I + 2J, 2I + 3J /; D(I) / 10 /;
E(I) / 8 /;
F(I) / 10 /;
VARIABLES:
X(K) / >=0 /;
MAXIMIZE Z: X(1) + X(2); SUBJECT TO:
3X(1) + 4X(2) <= D(1);
2X(1) + 2X(2) <= E(1);
2X(1) + 3X(2) <= F(1); ENDSETS
END。

LINGO软件的求解过程分析

LINGO软件的求解过程分析

在LINGO中使用LINDO模型 ④ 运行程序的LINGO报告窗口(如下图)
注:LINGO不询问是否进行敏感性分析,敏感性分析 需要将来通过修改系统选项启动敏感性分析后,再调 用“REPORT|RANGE”菜单命令来实现。现在同样可 以把模型和结果报告保存在文件中。
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
三、 LINGO软件的基本使用方法
1、Lingo入门 2、在Lingo中使用集合 3、运算符和函数 4、Lingo的主要菜单命令
LINGO的界面
1、Lingo入门
• LINGO软件的主窗口(用 户界面),所有其他窗口 都在这个窗口之内。
• 状态行(最左边显 示“Ready”,表示 “准备就绪”)
约束的定义方式
I N V ( I ) I N V ( I 1 ) R P ( I ) O P ( I ) D E M ( I ) , I 1 , 2 , 3 , 4
INV (0)10
@For(Quarters(I)|I#GT#1: INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););
约束的定义方式
• @for(quarters(I):RP(I)<40);
循环函数 @FOR(集合(下标):关于集合的属性的约束关系式)
对冒号“:”前面的集合的每个元素(下标),冒号 “:”后面的约束关系式都要成立 本例中,每个季度正常的生产能力是40条帆船,这正是 语句“@FOR(QUARTERS(I):RP(I)<40);”的含义。 这个语句可以简化成“@FOR(QUARTERS:RP<40);” 。
LINGO中定义集合及其属性 LP模型在LINGO中的一个典型输入方式

运筹学实验报告-lingo软件的使用-习题代码

运筹学实验报告-lingo软件的使用-习题代码

运筹学实验报告姓名:学号:班级:相关问题说明:一、实验性质和教学目的本实验是运筹学课内安排的上机操作实验。

目的在于了解、熟悉计算机Lingo软件在运筹学模型求解中的作用,激发学习兴趣,提高学习效果,增强自身的动手能力,提高实际应用能力。

二、实验基本要求要求学生:1. 实验前认真做好理论准备,仔细阅读实验指导书;2. 遵从教师指导,认真完成实验任务,按时按质提交实验报告。

三、主要参考资料1.LINGO软件2. LINGO8.0及其在环境系统优化中的应用,天津大学出版社,20053. 优化建模与LINDO/LINGO软件,清华大学出版社,20054.运筹学编写组主编,运筹学(修订版),清华大学出版社,19905.蓝伯雄主编,管理数学(下)—运筹学,清华大学出版社,19976.胡运权主编,运筹学习题集(修订版),清华大学出版社,19957.胡运权主编,运筹学教程(第二版),清华大学出版社,2003实验内容1、线性规划问题:⎪⎪⎩⎪⎪⎨⎧≥≤+≤+≤++=0,13119241171289..68max 2121212121x x x x x x x x t s x x z (1) 给出原始代码;(2) 计算结果(包括灵敏度分析,求解结果粘贴);(3) 回答下列问题(手写):a ) 最优解及最优目标函数值是多少;b ) 资源的对偶价格各为多少,并说明对偶价格的含义;c ) 为了使目标函数值增加最多,让你选择一个约束条件,将它的常数项增加一个单位,你将选择哪一个约束条件?这时目标函数值将是多少?d ) 对x 2的目标函数系数进行灵敏度分析;e ) 对第2个约束的约束右端项进行灵敏度分析;f ) 结合本题的结果解释“Reduced Cost ”的含义。

对偶价格就是说 约束方程右端变量增加1对目标函数值的影响 答案: (1)代码max =8*x1+6*x2; 9*x1+8*x2<=12; 7*x1+11*x2<=24; 9*x1+11*x2<=13; x1>=0; x2>=0;(2)计算结果Global optimal solution found.Objective value: 10.66667 Total solver iterations: 2Variable Value Reduced Cost X1 1.333333 0.000000 X2 0.000000 1.111111Row Slack or Surplus Dual Price 1 10.66667 1.000000 2 0.000000 0.8888889 3 14.66667 0.000000 4 1.000000 0.000000 5 1.333333 0.0000006 0.000000 0.000000 Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowable Allowable Variable Coefficient Increase Decrease X1 8.000000 INFINITY 1.250000 X2 6.000000 1.111111 INFINITYRighthand Side RangesRow Current Allowable Allowable RHS Increase Decrease 2 12.00000 1.000000 12.00000 3 24.00000 INFINITY 14.66667 4 13.00000 INFINITY 1.000000 5 0.0 1.333333 INFINITY 6 0.0 0.0 INFINITY(3)a) b) c) d) e) f)2、运输问题:(1) 给出原始代码;(2) 计算结果(决策变量求解结果粘贴)Min Z = Cij Xij∑=61i Xij <=bj (j=1...8) 销量约束∑∑==6181i j∑=81j Xij = ai (i=1...6) 产量约束Xij ≥ 0(i=1...6;j=1...8)代码:model :!6发点8 model :!6发点8收点运输问题; sets :warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume; endsetsmin =@sum (links: cost*volume); !目标函数; @for (vendors(J):@sum (warehouses(I): volume(I,J))<=demand(J)); !需求约束; @for (warehouses(I):@sum (vendors(J): volume(I,J))=capacity(I)); !产量约束; !这里是数据; data :capacity=55 47 42 52 41 32; demand=60 55 51 43 41 52 43 38; cost=6 2 9 7 4 2 5 9 4 5 5 3 8 5 3 25 2 1 3 7 4 8 3 767 9 9 2 7 1 2 3 6 5 7 2 6 5 5 9 2 28 1 4 3; enddata end答案Global optimal solution found.Objective value: 473.0000 Infeasibilities: 0.000000 Total solver iterations: 9Model Class: LPTotal variables: 48 Nonlinear variables: 0 Integer variables: 0Total constraints: 15Nonlinear constraints: 0Total nonzeros: 144Nonlinear nonzeros: 0Variable Value Reduced Cost CAPACITY( WH1) 55.00000 0.000000 CAPACITY( WH2) 47.00000 0.000000 CAPACITY( WH3) 42.00000 0.000000 CAPACITY( WH4) 52.00000 0.000000 CAPACITY( WH5) 41.00000 0.000000 CAPACITY( WH6) 32.00000 0.000000 DEMAND( V1) 60.00000 0.000000 DEMAND( V2) 55.00000 0.000000 DEMAND( V3) 51.00000 0.000000 DEMAND( V4) 43.00000 0.000000 DEMAND( V5) 41.00000 0.000000 DEMAND( V6) 52.00000 0.000000 DEMAND( V7) 43.00000 0.000000 DEMAND( V8) 38.00000 0.000000 COST( WH1, V1) 6.000000 0.000000 COST( WH1, V2) 2.000000 0.000000 COST( WH1, V3) 9.000000 0.000000 COST( WH1, V4) 7.000000 0.000000 COST( WH1, V5) 4.000000 0.000000 COST( WH1, V6) 2.000000 0.000000 COST( WH1, V7) 5.000000 0.000000 COST( WH1, V8) 9.000000 0.000000 COST( WH2, V1) 4.000000 0.000000 COST( WH2, V2) 5.000000 0.000000 COST( WH2, V3) 5.000000 0.000000 COST( WH2, V4) 3.000000 0.000000 COST( WH2, V5) 8.000000 0.000000 COST( WH2, V6) 5.000000 0.000000 COST( WH2, V7) 3.000000 0.000000 COST( WH2, V8) 2.000000 0.000000 COST( WH3, V1) 5.000000 0.000000 COST( WH3, V2) 2.000000 0.000000 COST( WH3, V3) 1.000000 0.000000 COST( WH3, V4) 3.000000 0.000000 COST( WH3, V5) 7.000000 0.000000 COST( WH3, V6) 4.000000 0.000000COST( WH3, V8) 3.000000 0.000000 COST( WH4, V1) 7.000000 0.000000 COST( WH4, V2) 6.000000 0.000000 COST( WH4, V3) 7.000000 0.000000 COST( WH4, V4) 9.000000 0.000000 COST( WH4, V5) 9.000000 0.000000 COST( WH4, V6) 2.000000 0.000000 COST( WH4, V7) 7.000000 0.000000 COST( WH4, V8) 1.000000 0.000000 COST( WH5, V1) 2.000000 0.000000 COST( WH5, V2) 3.000000 0.000000 COST( WH5, V3) 6.000000 0.000000 COST( WH5, V4) 5.000000 0.000000 COST( WH5, V5) 7.000000 0.000000 COST( WH5, V6) 2.000000 0.000000 COST( WH5, V7) 6.000000 0.000000 COST( WH5, V8) 5.000000 0.000000 COST( WH6, V1) 5.000000 0.000000 COST( WH6, V2) 9.000000 0.000000 COST( WH6, V3) 2.000000 0.000000 COST( WH6, V4) 2.000000 0.000000 COST( WH6, V5) 8.000000 0.000000 COST( WH6, V6) 1.000000 0.000000 COST( WH6, V7) 4.000000 0.000000 COST( WH6, V8) 3.000000 0.000000 VOLUME( WH1, V1) 0.000000 4.000000 VOLUME( WH1, V2) 55.00000 0.000000 VOLUME( WH1, V3) 0.000000 7.000000 VOLUME( WH1, V4) 0.000000 5.000000 VOLUME( WH1, V5) 0.000000 2.000000 VOLUME( WH1, V6) 0.000000 0.000000 VOLUME( WH1, V7) 0.000000 3.000000 VOLUME( WH1, V8) 0.000000 8.000000 VOLUME( WH2, V1) 0.000000 1.000000 VOLUME( WH2, V2) 0.000000 2.000000 VOLUME( WH2, V3) 0.000000 2.000000 VOLUME( WH2, V4) 43.00000 0.000000 VOLUME( WH2, V5) 0.000000 5.000000 VOLUME( WH2, V6) 0.000000 2.000000 VOLUME( WH2, V7) 4.000000 0.000000 VOLUME( WH2, V8) 0.000000 0.000000 VOLUME( WH3, V1) 0.000000 4.000000 VOLUME( WH3, V2) 0.000000 1.000000VOLUME( WH3, V4) 0.000000 2.000000 VOLUME( WH3, V5) 0.000000 6.000000 VOLUME( WH3, V6) 0.000000 3.000000 VOLUME( WH3, V7) 0.000000 7.000000 VOLUME( WH3, V8) 0.000000 3.000000 VOLUME( WH4, V1) 0.000000 5.000000 VOLUME( WH4, V2) 0.000000 4.000000 VOLUME( WH4, V3) 0.000000 5.000000 VOLUME( WH4, V4) 0.000000 7.000000 VOLUME( WH4, V5) 0.000000 7.000000 VOLUME( WH4, V6) 14.00000 0.000000 VOLUME( WH4, V7) 0.000000 5.000000 VOLUME( WH4, V8) 38.00000 0.000000 VOLUME( WH5, V1) 41.00000 0.000000 VOLUME( WH5, V2) 0.000000 1.000000 VOLUME( WH5, V3) 0.000000 4.000000 VOLUME( WH5, V4) 0.000000 3.000000 VOLUME( WH5, V5) 0.000000 5.000000 VOLUME( WH5, V6) 0.000000 0.000000 VOLUME( WH5, V7) 0.000000 4.000000 VOLUME( WH5, V8) 0.000000 4.000000 VOLUME( WH6, V1) 0.000000 4.000000 VOLUME( WH6, V2) 0.000000 8.000000 VOLUME( WH6, V3) 0.000000 1.000000 VOLUME( WH6, V4) 0.000000 1.000000 VOLUME( WH6, V5) 0.000000 7.000000 VOLUME( WH6, V6) 32.00000 0.000000 VOLUME( WH6, V7) 0.000000 3.000000 VOLUME( WH6, V8) 0.000000 3.000000Row Slack or Surplus Dual Price1 473.0000 -1.0000002 19.00000 0.0000003 0.000000 0.0000004 9.000000 0.0000005 0.000000 0.0000006 41.00000 0.0000007 6.000000 0.0000008 39.00000 0.0000009 0.000000 1.00000010 0.000000 -2.00000011 0.000000 -3.00000012 0.000000 -1.00000013 0.000000 -2.00000014 0.000000 -2.00000015 0.000000 -1.0000003、一般整数规划问题:某服务部门各时段(每2h为一时段)需要的服务员人数见下表。

Lingo精选题目及参考答案

Lingo精选题目及参考答案

Lingo 精选题目及答案答题要求:将Lingo 程序复制到Word 文档中,并且附上最终结果。

1、简单线性规划求解(目标函数)2134maxx x z += s.t.(约束条件)⎪⎪⎩⎪⎪⎨⎧≥≤≤+≤+0,781022122121x x x x x x x2、整数规划求解219040Max x x z +=⎪⎩⎪⎨⎧≥≤+≤+0,702075679212121x x x x x x 3、0-1规划求解Max 432215.18.04.0x x x x f +++=10106234321≤+++x x x x10,,,4321或=x x x x4、非线性规划求解||4||3||2||min 4321x x x x z +++=s.t. ⎪⎪⎩⎪⎪⎨⎧-=+--=-+-=+--2132130432143214321x x x x x x x x x x x x5、集合综合应用产生一个集合5052--=x x y ,(10,...,2,1=x ),求y 前6个数的和S 1,后6个数的和S 2,第2~8个数中的最小值S 3,最大值S 4。

6、综合题要求列出具体的目标函数和约束条件,然后附上Lingo 程序和最终结果。

6.1 指派问题有四个工人,要指派他们分别完成4项工作,每人做各项工作所消耗的时间如下表:问指派哪个人去完成哪项工作,可使总的消耗时间为最小?6.2 分配问题某两个煤厂A1,A2每月进煤数量分别为60t和100t,联合供应3个居民区B1,B2,B3。

3个居民区每月对煤的需求量依次分别为50t,70t,40t,煤厂A1离3个居民区B1,B2,B3的距离依次分别为10km,5km,6km,煤厂A2离3个居民区B1,B2,B3的距离分别为4km,8km,12km。

问如何分配供煤量使得运输量(即t·km)达到最小?1、model:max=4*x1+3*x2;2*x1+x2<10;x1+x2<8;x2<7;end2、model:max=40*x1+90*x2;9*x1+7*x2<56;7*x1+20*x2<70;@gin(x1);@gin(x2);end3、model:max=x1^2+0.4*x2+0.8*x3+1.5*x4;3*x1+2*x2+6*x3+10*x4<10;@bin(x1); @bin(x2);@bin(x3); @bin(x4);end4、model:max=@abs(x1)+2*@abs(x2)+3*@abs(x3)+4*@abs(x4);x1-x2-x3+x4=0;x1-x2+x3-3*x4=1;x1-x2-2*x3+3*x4=-1/2;end5、model:sets:jihe/1..10/:y;ss/1..4/:S;endsets!由于y和s中部分有负数,所以要先去掉这个约束;@for(jihe:@free(y));@for(ss(i):@free(S));!产生元素;@for (jihe(x):y(x)=x^2-5*x-50); S(1)=@sum (jihe(i)|i#le#6:y(i)); S(2)=@sum (jihe(i)|i#ge#5:y(i));S(3)=@min (jihe(i)|i#ge#2 #and# i#le#8:y(i)); S(4)=@max (jihe(i)|i#ge#2 #and# i#le#8:y(i)); end6.1、设:第i 个工人做第j 项工作用时ij t ,标志变量ij f 定义如下:⎩⎨⎧=其他件工作个工人去做第指派第01j i f ijmin∑∑==⨯4141i j ij ijt fs.t. 141=∑=i ijf()4,3,2,1=j 每份工作都有一人做∑==411j ijf()4,3,2,1=i 每人都只做一项工作model : sets :work/A B C D/;worker/jia yi bing ding/; time(worker,work):t,f; endsets!目标函数可以用[obj]标志出,也可以省略;[obj] min =@sum (time(i,j):t(i,j)*f(i,j)); data :!可以直接复制表格,但是在最后要有分号; t=; e !每份工作都有一人做;@for (work(j):@sum (time(i,j):f(i,j))=1); !每人都只做一项工作;@for (worker(i):@sum (time(i,j):f(i,j))=1); !让f 取0-1值,此条件可以省略;!@for(time(i,j):@bin(f(i,j))); end6.2设:煤厂进煤量i s ,居民区需求量为i d ,煤厂i 距居民区j 的距离为ij L ,煤厂i 供给居民区j 的煤量为ij g那么可以列出如下优化方程式∑∑==⨯=3121min j i ij ij L gs.t ()3,2,121==∑=j d gi jij()2,131=≤∑=i s gj iijmodel : sets :supply/1,2/:s; demand/1,2,3/:d;link(supply,demand):road,sd; endsets data :road=10 5 6 4 8 12; d=50 70 40; s=60 100; enddata[obj] min =@sum (link(i,j):road(i,j)*sd(i,j)); @for (demand(i):@sum (supply(j):sd(j,i))=d(i)); @for (supply(i):@sum (demand(j):sd(i,j))<s(i));end1.线性规划模型。

LINGO编程求解小型运动会项目排序

LINGO编程求解小型运动会项目排序

LINGO编程求解小型运动会项目排序
苏俊毅
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2013(000)020
【摘要】通过把报名表矩阵化,把运动会项目排序的问题转化为旅行商问题,并且根据两个问题的不同点,引入虚项目,减少了人工操作.介绍了运用LINGO编程求解小型运动会项目排序问题的方法.
【总页数】3页(P9-11)
【作者】苏俊毅
【作者单位】佛山市南海技师学院,广东佛山528000
【正文语种】中文
【相关文献】
1.基于0-1整数线性规划的运动项目排序问题及LINGO软件实现 [J], 刘淑荣;潘莹
2.Director中利用Lingo脚本编程实现天气实况显示及实时更新 [J], 李艳兵;陈育跃;骆世瑛
3.Visual Basic与Lingo混合编程在化工优化中的应用 [J], 杜向前;张岗;穆立文;巴换粉;张立刚;吴显斌
4.非线性规划建模与LINGO软件的编程应用 [J], 桑杨阳; 朱万红; 但兵兵
5.石油与天然气工程挑战性课程教学实践
——海洋油气集输计算机编程项目求解 [J], 赵海宁
因版权原因,仅展示原文概要,查看原文内容请购买。

关于零件加工排序问题的数学模型、

关于零件加工排序问题的数学模型、

零件的加工排序的最优模型摘要:根据问题“建立模型求出使总加工时间最短的加工顺序”可知,本题为建立最优化模型,求出零件加工时间最短的加工顺序。

本题根据已知数据,结合问题中的具体要求,我们引入0/1变量建立工件排序的数学规划模型。

借助Lingo软件进行求解运算,得出其中的最优排序方案。

使得完成这批工件加工任务所需要的总时间最省。

在这里,我们通过对各个工件(排序后)完成某项特定工序所需总时间进行求和得到整个加工任务所需要的总时间。

而各工件的总时间包括其机床加工时间和加工其他零件时的等待时间。

最后,根据我们建立的模型求解得出某塑料厂加工十个零件模型所需最短总加工时间为943分钟,总加工时间最短的加工顺序为:4-5-10-7-8-2-9-1-6-3,具体结果如表6-1,6-2。

一、问题重述某塑料厂要加工十个零件模型(编号为1,2,…,10),这些零件模型必须依次通过3个设备C1,C2,C3,每个设备一次只能加工一个零件,其加工时间如下表(单位:分钟)。

二、问题分析零件在C1工序上的总加工时间是固定的。

关键是在C2及C3工序上会出现等待。

如果采用不同序加工,那么在C1上已加工好的零件,在C2上加工的时间会落到在C1上比其后加工的零件的后面,则其在C2上等待的时间更长,同样在C2与C3工序上也是这样,要求加工时间最短的加工顺序,就必须尽量减少工件在C2及C3工序上的等待时间,由于工件必须在它们要求的时间内完工,即某工件在任务开始起到该工件加工完毕之间所用的总时间应少于该工件的规定完工时间。

所以要使整个加工任务的工件总价值最大,必须合理选择加工工件的种类及其加工的次序。

三、模型假设假设一:在后面的模型中,我们都假定了忽略工件在转换工序时的运输时间。

即将整个工件加工过程简化为一个连续的过程,只考虑机床在加工工件时其他工件的等待时间。

假设二:零件之间是相互独立的,从生产的角度看,先加工一个零件并不影响对后面零件的加工。

贪心算法(4):作业排序问题

贪⼼算法(4):作业排序问题上⼀堂课程,我们学习了如何选择活动,使得在不发⽣冲突的前提下,能参与尽可能多的活动,这⾥没有考虑到不同的活动是否会带来不同的收益,假设它们的收益是⼀样的。

现在我们把问题修改下:有⼀系列作业,每个作业必须在各⾃的截⽌时间点之前完成,并且已知完成每个⼯作需要花费的时间以及带来的收益。

为了简单起见,假设完成每个⼯作都需要相等的单位时间,这样作业的截⾄时间点也就是单位时间的倍数。

再假设⼀次只能安排⼀个作业,完成⼀个作业后才能继续下⼀个作业。

问:如何选择作业并安排次序使它们能带来的总收益为最⼤?我们⽤例⼦A来说明。

【输⼊】有4个作业a,b,c,d。

它们各⾃的截⽌时间和能带来的收益如下:【输出】请找出⼀种能带来最⼤收益的作业执⾏次序。

在例⼦中,下列作业次序能带来最⼤的收益:{c, a}完成作业c,能带来的收益是40;因为做作业c,截⽌时间为1,它必须安排在0-1之间执⾏。

这样已经错过了b或d的截⽌时间点(1),因此⽆法再选择b或d,只能选择作业a,a的截⾄时间点为4,来得及完成。

做作业a的收益是20,因此完成作业c和a能带来的总收益是 40+20=60。

⽽选择其他次序的作业,都⽆法超过收益60。

参见下⾯的动图:我们再看⼀个例⼦B【输⼊】有5个作业a,b,c,d,e。

它们各⾃的截⽌时间和能带来的收益如下:请你选择和安排能获取最⼤收益的作业次序,先不给出答案,请你先思考,如何解答,然后再继续阅读。

算法分析⼀个简单粗暴的算法就是⽣成给定作业集合的所有⼦集,并检查每⼀个⼦集以确定该⼦集中作业的可⾏性,然后找出哪个可⾏⼦集可以产⽣最⼤收益。

这是⼀个典型的贪⼼算法。

算法思路如下:1)根据收益递减顺序对所有作业进⾏排序。

2)将结果序列初始化,并把已排序作业中的第⼀个作业加⼊3)依次按下⾯的规则处理剩余的n-1个作业如果把当前作业加⼊结果序列,不会错过它的截⽌时间,那么把它加⼊结果序列;否则忽略当前的作业。

《2.4.1 基于解析算法的问题解决》作业设计方案

《基于解析算法的问题解决》作业设计方案(第一课时)一、作业目标本作业旨在帮助学生掌握解析算法的基本概念和基本方法,提高他们的问题解决能力,并加深对信息技术课程的理解。

二、作业内容1. 任务一:设计并实现一个简单的解析算法。

要求算法能够解决“求两个数的最大值”的问题。

学生需要使用信息技术工具(如编程语言)实现算法,并提交程序代码和运行结果。

2. 任务二:分析并评价不同的解析算法。

学生需要选择一个或多个解析算法(如排序、搜索等),分析其原理、优缺点,并提交分析报告。

3. 任务三:完成一个基于解析算法的问题解决案例。

学生需要选择一个实际的问题(如优化交通路线、预测天气等),设计并实现相应的解析算法,提交解决问题的过程和结果。

三、作业要求1. 作业应在规定时间内完成,并提交完整的程序代码、分析报告和问题解决案例。

2. 作业应体现学生的独立思考和创新能力,鼓励创新性和实践性。

3. 作业应符合信息技术课程的要求,使用正确的信息技术工具和方法解决问题。

4. 鼓励团队合作,提倡小组协作完成作业。

四、作业评价1. 评价标准:根据作业的完成质量、创新性、实践性和团队合作情况进行评价。

2. 评价方式:教师对学生提交的作业进行评分和反馈,同时对优秀作业进行展示和鼓励。

3. 评价时间:作业评价应在作业提交后的1-2周内完成。

五、作业反馈1. 教师将对学生的作业进行详细反馈,包括对代码、分析报告和问题解决案例的点评和建议,以及在作业完成过程中的优点和不足之处。

2. 学生应认真听取教师的反馈,反思自己的不足之处,并在后续的作业中加以改进。

3. 学生可以通过作业反馈与教师和其他学生进行交流和讨论,共同提高信息技术能力和问题解决能力。

通过本次作业,学生将有机会掌握解析算法的基本概念和方法,提高问题解决能力,并加深对信息技术课程的理解。

同时,通过团队合作和教师的反馈,学生将不断改进自己的学习方法和技能,为未来的学习和工作打下坚实的基础。

lingo编程

lingo编程启航系列之数学建模启航系列之数学建模培训资料培训资料Lindo 和 Lingo 是美国 Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。

Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有 Lindo 的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。

Lindo 和 Lingo 软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。

Lingo 实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。

由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。

应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等...Lindo/Lingo 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。

此外,Lindo/Lingo 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。

1. Lingo优化模型连续优化整数规划优化模型二次规划非线性规划2. lingo 例1 用Lingo解决一个二次规划问题22max982770.32xxxxxx,,,,121122xx,,100,12 ,stxx..2,,12,xx,0,为整数,12解:在lingo命令行中输入如下代码, x1+x2<=100;!一个简单例子;max=98*x1+277*X2-x1*x1-0.3*X1*x2-2*X2*x2;x1-2*x2<=0;@gin(x1);@gin(x2);按求解键得到结果如下,Global optimal solution found.Objective value: 11077.50Extended solver steps: 0Total solver iterations: 44Variable Value Reduced CostX1 35.00000 -8.500002X2 65.00000 -6.500004在这个例子里要注意如下一些细节:对本例结果的解释:找到全局最优解,使得目标函数值为xx,对应变量,的值分别为和,11077.50356512对应变量xx,的影子价格分别为,。

Lingo软件求解排队模型

❖ 顾客到达就能理发的概率为0.3654135,系统中的 平均顾客数为1.422556人,
❖ 等待的平均顾客数为0.7879699,顾客在理发店内 逗留时间的期望值为0.7472354小时,等待时间的 期望值为0.4139021小时.在可能到达的顾客中因客 满而离开的概率就是系统中有5个顾客的概率,即 :0.0481203.
3.953271
由运行结果可知,在单队多服务台情况下,该服务机构的有关运行指标如
下:
顾客到达需等待的概率为 0.5677570, 系统中的平均顾客数为 3.953271
人, 等 待的 平均 顾 客数 为 1.703271 人 , 顾客 在 系统 中 的平 均逗 留 时间 为 4.392523 分钟,平均等待时间为 1.892523 分钟.
W Wq 1 Wq T ,L W ,Lq Wq
例 7.4.1 用 Lingo 软件求解例 7.2.1.
编写 Lingo 程序如下:
S=1;lambda=3;mu=4;load=lambda/mu; Pwait=@peb(load,S); W_q=Pwait/mu/(S-load); L_q=lambda*W_q; W=W_q+1/mu; L=lambda*W; P0=1- load;
);
应用 Lingo 软件求解,运行结果如下:
Variable
Value
LAMBDA
0.9000000
MU
0.4000000
LOAD
2.250000
S( 3)
3.000000
PWAIT( 3)
0.5677570
W_Q( 3)
1.892523
L_Q( 3)
1.703271
W( 3)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档