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

单件作业排序问题的基于lingo软件解法(含代码)
单件作业排序问题的基于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

(默认最先加工的工件初试加工时间为0)。

三、模型假设

(1)、一个工件不能同时在不同的机床上加工。

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

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

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

四、模型建立

目标函数:min tt

{}max (,5)(,5),1,2,...,20tt x i t i i =+=

等价于: (,5)(,5),1

t t 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 ≥==

y(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;

endsets

data:

t=@OLE('D:\jianmo1.xlsx',data1);

enddata

min=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; clc

load T %t(i,j)

load Y_b

load X_b

[~,col]=size(X);

row=length(T);

%%排序

for i=1:row

tem=find(Y(i,:)==0);

su_m(1,i)=length(tem);

end

[~,order]=sort(su_m);

%%输出顺序

p=num2str(order(1));

for i=2:row

p=[p,'->',num2str(order(i))]; end

disp(['顺序为:',p]);

%%按照加工顺序对x(i,j)排序

t=(T==0);

X(t)=0;%忽略加工时间为0的工序

for i=1:col

A=X(:,i);

ord_X(:,i)=A(order);

end

%%按照加工顺序对t(i,j)排序

for i=1:col

A=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教程 和MATLAB入门教程

LINGO 使用教程 LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@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=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

浅谈制造业作业排序问题

浅谈制造业作业排序问题 【摘要】调查研究表明企业在生产过程中真正用于产生利润的生产时间只占生产运作周期的5%而其余95%的时间主要取决于作业排序的等待时间。因此降低准备工作时间进行有效作业排序就成为提高企业生产效率的重要手段之一。本文第一部分介绍了作业排序的基本理论第二部分介绍了制造业中的作业排序问题和分类并将其与服务业的作业排序进行了比较最后部分进行了总结。【关键词】作业排序制造业 1 作业排序基本理论 1.1作业排序问题的基本概念作业排序是指合理安排生产运作的各项活动作业、生产运作资源使用、生产运作设施配置的时间表等。在生产车间就是具体地确定每台设备、每个人员每天的工作任务和工件在每台设备上的加工顺序。作业排序要解决先加工哪个工件后加工哪个工件的加工顺序问题还要解决同一设备上不同工件的加工顺序问题。在生产运作中作业排序的周期由作业时间、作业等待时间、设备调整时间、运输时间、检验测试时间、库存时间等构成而只有作业时间才是真正形成企业利润的时间调查研究表明作业时间往往只占生产运作周期的5%左右而生产运作周期的95%却被准备工作时间所占用尤其是作业等待时间、设备调整时间、库存时间等因此企业的效率主要取决于企业的作业排序的合理性。 1.2作业排序的分类随着近些年经济的发展 科学技术在各行业的不断渗透和应用尤其是信息技术的应用更给

所面临的环境和经营生产方式带来了空前的变化人们的思维也在逐渐跳出原有的框架对作业排序的研究已突破了原来只有在传统制造业上才有的思路并不断拓宽应用到了非制造行业上来也就形成了制造业领域和服务业领域的两大作业排序分类方法。对应这两种领域又形成两种基本作业排序:劳动力作业排序和生产作业排序。劳动力作业排序主要是确定人员何时工作而生产作业排序则将不同工件安排到不同设备上或安排不同的人做不同的工作。这两种作业排序在实际工作中并非毫无关联而往往是相互融合渗透在同一工作中有时两种作业排序问题都存在它们共同起作用即在生产中既有产品排序同时又伴有人员排序问题。 2 制造业的作业排序在生产运作的过程中人们最早关注生产作业排序主要是从制造业上来考虑。在人类社会长期发展过程中制造业的发展对社会的影响非常大而据此总结出来的一些理论也就更多的是对制造业的总结和归纳。随着社会的发展这部分理论也就更加拓宽到了其他各行各业在各行业的具体生产作业排序中都在发挥着巨大作用。下面我们主要对按机器的种类和数量不同而确定的排序问题进行研究本文将用Conway等人提出的方法来表示该方法用四个参数来表示:n/m/A/B其中n为工件数m为机器数A为车间类型(如在此位置标为F、P、G则分别代表流水作业排序、流水作业排列排序和一般单件作业排序)B为目标函数其中几种理论和模型论述如下。 2.1单台机器的排序问题它是这样一种情况:有n个工件要在同一台设备上进行加工;所有工件都必须经过这台设备

LINGO软件简介

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整 数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;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: 45 Variable Value Reduced Cost X1 X2 X3 Row 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{min 4 ,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;

lingo用法总结

ji例程1、 model: sets: quarters/1..4/:dem,rp,op,inv; endsets min=@sum(quarters:400*rp+450*op+20*inv); @for(quarters(i):rp<=40); @for(quarters(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 25; enddata end 例程2、 model: sets: quarters/1..4/:dem,rp,op,inv; endsets min=@sum(quarters:400*rp+450*op+20*inv); @for(quarters(i):rp<=40); @for(quarters(i)|i#gt#1: inv(i)=inv(i-1)+rp(i)+op(i)-dem(i);); inv(1)=a+rp(1)+op(1)-dem(1); data: dem=40 60 75 25; a=? enddata end ?LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除注释语句和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要。 ?LINGO中函数一律需要以“@”开头 ?Lingo中的每个语句都以分号结尾 ?用LINGO解优化模型时已假定所有变量非负(除非用限定变量取值范围的函数@free或@sub或@slb另行说明)。 ?以感叹号开始的是说明语句(说明语句也需要以分号结束)) ?理解LINGO建模语言最重要的是理解集合(Set)及其属性(Attribute)的概念。 ?一般来说,LINGO中建立的优化模型可以由5个部分组成,或称为5“段” (SECTION): (1)集合段(SETS):以“ SETS:” 开始,“ENDSETS”结束,定义

LINGO11教程

LINGO 是用来求解线性和非线性优化问题的简易工具。LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。 §1 LINGO 快速入门 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO 中求解如下的LP 问题: ,6002100 350. .32min 21211 212 1≥≤+≥≥++x x x x x x x t s x x 在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO 软件计算6个发点8个收点的最小费用运输问题。产销单位运价如

model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@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=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个

Lingo软件在求解数学优化问题的使用技巧

Lingo软件在求解数学优化问题的使用技巧 LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。 LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。 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求解非线性规划时已约定各变量非负。 LINGO内部函数使用详解。 LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。 (1)常用数学函数 @ABS(X) 返回变量X的绝对数值。 @COS( X) 返回X的余弦值,X的单位为弧度 @EXP( X)

lingo操作介绍

1.2 菜单介绍 1.2.1 File 1 New 新建一个窗口, 当你执行这个命令时, 会出现如下对话框: 你可以在对话框中选择你想要建立的类型. 类型如下: 1)扩展名为(*.lg4) LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式, 这种格式支持字体格式, 自定义格式以及动态连接, LG4以二进制格式存储, 所以不能被其它的应用软件直接读取. 2)扩展名为(*.lng) LNG是捷便的存储方式,是4.0版本前的标准文件格式,为了与前版本的兼容,所以还一直在用,LNG文件是以ASCII形式存储的,所以能被支持文本文件的应用程序读取.该格式不支持多种字体. 3)扩展名为(*.ltd) LTD是数据文件, 可以从@FILE函数导入数据,@FILE函数只能读取文本文件,所以所有的LTD文件是以ASCII形式存储, 也不支持多种字体. 4)扩展名为(*.ltf) LTF是LINGO的调试文件格式, 也是以ASCII格式存储,能直接被LINGO的File|Take command执行. 2 Log Output 输出文本文件,可以将随后原输出到报告窗口的内容输出到文本中. 该命令与Maple 中的writeto命令非常相似. 在Maple中输入如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); > y; > writeto(terminal);

> y; 执行菜单中的Edit|Excute|Worksheet, 按钮,窗口重新显示如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); x:=-.9589242747 > y; > writeto(terminal); > y; 0.4010757253 而在C盘的maple.txt文件的内容为: -.9589242747, .0410757253 -.9589242747 .0410757253 从中可以知道,用了writeto(filename)命令以后把结果输出到filename 中. 直到碰到writeto(terminal)命令时,才重新在工作窗口中显示. 当你点击菜单File|Log Output时,系统出现保存对话框,系统就会将命令窗口中的输出结果保存到指定的文件中. 3 Import LINDO File 该命令是用来导入LINDO软件保存的LINDO文件(*.LTX)格式. 只要在LINGO中导入LINDO文件格式, LINGO系统自动将该文件转化为LINGO可执行语句. 1.2.2 Edit 1 Paste Function 用该命令可以在当前点插入LINGO的内部函数, 2 Select Fonts 设置字体类型, 字体大小,字体颜色. 1.2.3 LINGO 1 Solve 用solve命令对当前窗口中的模型求解, 该命令只对report script窗口起作用, 不能对数据窗口求解.

如何在lingo中使用集合1

例题1. 在lingo 中输入下列线性规划模型,并求解 ∑∈?=A j i j i x j i d z ),(),(),( min s.t. 1),1(≥∑∈V j j x , , },10,,2,1{,0),(x ,),(, 1,1),(V V A V V i i i j i x j j i x V i ?==∈=>=∑∈ 为非负实数 所有 的数值如下表:d d=0 8 5 9 12 14 12 16 17 22 8 0 9 15 16 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 15 12 16 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10 22 22 17 15 15 16 11 11 10 0; 分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo 中集合的建立 新建lingo 文件 输入下面内容 model : sets : V/1..10/;!创建集合V; A(V,V):d,x;!创建集合A 是V 乘V.而d,x 是与A 同结构的,即d ,x 分别是10*10矩阵; endsets min =@sum (A(i,j):d(i,j)*x(i,j));!创建目标函数; @sum (V(j):x(1,j))>=1; !第一个约束条件; @for (V(j)|j#gt#1: !i#gt#1为逻辑判断语句表示i>1是返回真值,但这里不能直接写i>1,因为">"是关系运算符不是逻辑运算符; @sum (V(i):x(i,j))=1;); !利用循环函数表达:当i>1(即i 从2到10)时, {x(i,j):j=1..10}的和等于1;

LINGO使用说明比较简单

Lingo介绍 Lingo是美国LINDO系统公司(Lindo Symtem Inc)开发的求解数学规划系列软件中的一个(其他软件为LINGDO,GINO,What’s Best等),它的主要功能是求解大型线性、非线性和整数规划问题,目前的版本是lingo11.0。 lingo分为Demo、solve suite、hyper、industrial、extended等六类不同版本,只有Demo版本是免费的,其他版本需要向LINDO系统公司(在中国的代理商)购买,Lingo的不同版本对模型的变量总数、非线性变量个数、整型变量个数和约束条件的数量做出不同的限制(其中extended版本无限制)。 Lingo的主要功能特色为: (1)既能求解线性规划,也有较强的求解非线性规划的能力; (2)输入模型简练直观; (3)运行速度快、计算能力强; (4)内置建模语言,提供几十种内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型; (5)将集合的概念引入编程语言,很容易将实际问题转换为Lingo语言; (6)能方便地与excel、数据库等其他软件交换数据。 学校图书馆40本《lingo和excel在数学建模中的应用》,袁新生、邵大宏、郁时炼主编,科学出版社

Lingo 程序设计简要说明 在数学建模中会遇到如规划类的题型,在这种模型中总存在着一个目标,并希望这个目标的取值尽可能的大或小,同时与这个目标有关的一系列变量之间存在一些约束。在构造出目标函数和约束条件的表达式后,我们需要对求出这个最值和各变量的取值。一般我们用LINGO 来对模型进行求解,本文将通过举一个简单的例子,围绕这个例子逐步学习LINGO 的使用。LINGO 只是一个求解工具,我们主要的任务还是模型的建立! 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。 示例:求解线性规划问题: max z=x1+x2+x3+x4+x5+x6+x7+x8 ???????????????≤≤≤≤≤≤269 + x88 + x72 + x66 + x55 + x47 + x38 + x28 + x1 6 15 6 + x8 7 + x7+ x65 + x54 + x44 + x34 + x25 + x15 444 + x86 + x77 + x68 + x58 + x45 + x32 + x27 + x14278 + x85 + x74 + x64 + x55 + x49 + x36 + x25 + x13389 + x84 + x75 + x62 + x57 + x46 + x35 + x28 + x1 2 154 + x8 3 + x79 + x66 + x55 + x45 + x3 4 + x27 + x1 求解这个模型的相应LINGO 程序代码如下: 程序一: max= x1+x2+x3+x4+x5+x6+x7+x8; x1 + 7*x2 + 4*x3 + 5*x4 + 5*x5 + 6*x6 + 9*x7 + 3*x8 + 415<=; 2*x1 + 8*x2 + 5*x3 + 6*x4 + 7*x5 + 2*x6 + 5*x7 + 4*x8 + 938<=; 3*x1 + 5*x2 + 6*x3 + 9*x4 + 5*x5 + 4*x6 + 4*x7 + 5*x8 + 827<=; 4*x1 + 7*x2 + 2*x3 + 5*x4 + 8*x5 + 8*x6 + 7*x7 + 6*x8 + 444<=; 5*x1 + 5*x2 + 4*x3 + 4*x4 + 4*x5 + 5*x6 + x7 + 7*x8 + 6 15<=; 6*x1 + 8*x2 + 8*x3 + 7*x4 + 5*x5 + 6*x6 + 2*x7 + 8*x8 + 926<=; 注:然后点击工具条上的按钮 即可。本模型的最优解为2.636364

LINGO的使用方法说明大全

LINGO的使用简介 LINGO软件是美国的LINGO系统公司开发的一套专门用于求解最优化问题的软件包.LINGO除了能够用于求解线性规划和二次规划外,还可以用于非线性规划求解、以及一些线性和非线性方程(组)的求解等.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,即可以求解整数规划,而且执行速度快.LINGO是用来求解线性和非线性优化问题的简易工具.LINGO置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果.在这里仅简单介绍LINGO的使用方法. LINGO(Linear INteractive and General Optimizer )的基本含义是交互式的线性和通过优化求解器.它是美国芝加哥大学的 Linus Schrage 教授于1980年开发了一套用于求解最优化问题的工具包,后来经过完善成何扩充,并成立了LINDO系统公司.这套软件主要产品有:LINDO,LINGO,LINDO API和What’sBest.它们在求解最优化问题上,与同类软件相比有着绝对的优势.软件有演示版和正式版.正式版包括:求解包(solver suite)、高级版(super)、超级版(hyper)、工业版(industrial)、扩展版(extended).不同版本的LINGO对求解问题的规模有限制,如附表3-1所示. 附表3-1 不同版本LINGO对求解规模的限制 版本类型总变量数整数变量数非线性变量数约束数 演示版 300 30 30 150 求解包 500 50 50 250 高级版 2000 200 200 1000 超级版 8000 800 800 4000 工业版 32000 3200 32000 16000 扩展版无限无限无限无限 3.1 LINGO程序框架 LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络最优化问题和最大最小求解问题,以及排队论模型中最优化等问题. 一个LINGO程序一般会包括以下几个部分: (1) 集合段:集部分是LINGO模型的一个可选部分.在LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“sets:”开始,以“endsets”结束.一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须先定义. (2) 数据段:在处理模型的数据时,需要为集部分定义的某些元素在LINGO求解模型之前为其指定

LINGO软件的使用

第十八章LINGO软件的使用 18.1 LINGO入门 18.1.1 LINGO软件的安装过程 点击LINGO9.0 for Windows安装文件,出现 点击“Next”按钮,出现 此时需要接受安装协议。系统安装时默认的目录是C:\LINGO9。安装完成前,会出现下图所示的对话框:

这个对话框询问你希望采用的默认的建模(即编程)语言,系统推荐的是采用LINGO语法,也就是选项“LINGO(recommended)”;你也可以选择“LINDO”将LINDO语法作为默认的设置。当然,安装后你也可以通过“LINGO|Options|File Format命令来修改默认的建模(即编程)语言。在上图中按下“OK”按钮,系统就会完成LINGO的安装过程。 18.1.2 LINGO基础知识 LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO 运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(Command Window)下操作,通过输入行命令驱动LINGO运行。由于其使用字符方式输入,初学者往往不太容易掌握。在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。 LINGO 9.0软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,计算的结果更加可靠。LINGO软件不仅可用于求解非线性规划问题,还可以用以求解非线性整数规划问题;LINGO包含了内置的建模语言,模型中所需的数据可以以一定格式保存在独立的文件中;LINGO允许以简练、直观的方式描述较大规模的优化问题。 注:LIGDO公司目前已将LINDO软件从其产品中删除了。事实上,LINDO软件的所有功能(包括LINDO语法格式)都在LINGO中得到了支持。 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。状态行最左边显示的是“Ready”表示“准备就绪”;右下角显示的是当前时间,时间前面是当前光标的位置“Ln1,Col1”(即1行1列)。将来,用户可以用选项命令(LINGO|Options菜单命令)决定是否需要显示工具栏和状态行。在LINGO 模型窗口中,选择菜单命令“File|Open(F3)”,可以看到下图所示的标准的“打开文件”对话框,我们看到有各种不同的“文件类型”:

lingo软件使用教程

lingo软件使用教程 一般来说,一个优化模型将由以下三部分组成: 1. 目标函数(Objective Function):要达到的目标。 2. 决策变量(Decision variables):每组决策变量的值代表一种方案。在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。 3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。 在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。在模型窗口输入如下代码: Max = 2*x1+3*x2; X1+2*x2<=8; 4*x1<16; 4*x2<12; 注意:1.每一个lingo表达式最后要跟一个分号; 2.多数电脑中没有符号,lingo中<=代替;为了方便可以用<代替小于等于,用>代替大于等于。 3.我们可以添加一些注释,增加程序的可读性。注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。 4.Lingo中不区分变量名的大小写。变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。变量名不能超过32个字符。 Lingo程序的一些规则: 1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。 2. 变量和它前面的系数之间要用“*”连接,中间可以有空格。 3. 变量名不区分大小写,但必须以字母开始,不超过32个字符。 4. 数学表达式结束时要用分号“;”表示结束。表达式可以写在多行上,但是表达式中间不能用分号。 5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“<=”来表示“小于等于”,用“>=”表示“大于等于”。小于等于也可以用更简单的“<”表示,大于等于用“>”表示。 集合段: 在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEMAND( J), LINKS( I, J)。这些量将在Lingo中的集合段定义。 集合段以SETS:表示开始,以ENDSETS表示结束。 如果一个集合的元素都已经定义过,就可以用一些循环函数(如@for). 注:1. 集合的属性相当于以集合的元素为下标的数组。Lingo中没有数组的概念,只有定义在集合上的属性的概念。 2 集合的定义语法: set_name[/set_member/:][attribute_list]; 集合的名称在左边,右边是这个集合上的属性,他们之间用冒号“:”分割开,最后由分号表示结束。如果在同一个集合上有多个属性时,不同的属性之间用逗号“,”隔开,如本例的cost和volume属性。如果要特别列出集合的元素时,在集合的名称后把元素写在两条斜线之间,如本例中的仓库可以写为 WAREHOUSES/WH1, WH2, WH3, WH4, WH5, WH6/: CAPACITY;

作业排序与车间作业计划(pdf 64页)

1 第九章作业排序与车间作业计划 机密

2 等待是日常生活的一部分 机密

3 本章要点 ?排序工作对资源进行分配,以在一段时间实现某一组织的任务?排序工作以生产能力计划为起点?当MRP 生成的生产作业计划以订单形式下达到生产车间时,我们要对其进行生产作业控制,包括订单的核准,排序,调度和车间控制机

机 本章主要内容 ?基本概念 ?车间排序作业 ?服务业中的作业排序 4

机 第一节基本概念 ?车间作业计划是安排零部件(作业,活动)的产出数 量,设备以及人工使用,投入时间及产出时间 ?生产控制是以生产计划和作业计划为依据,检查,落 实计划执行情况,发现偏差即采取纠正措施,保证各 项计划目标的实现 ?“编制作业计划”是加工制造发生之前的活动 ?“调度”是作业计划编制后实施生产控制所采取的一切行 动, 5

6 一、车间作业控制的内容 目的: —控制生产作业在执行中不偏离MPS/MRP 计划;—出现偏离时,采取措施,纠正偏差,若无法纠正,则反馈到计划层;—报告生产作业执行结果。 目的:—控制生产作业在执行中不偏离MPS/MRP 计划;—出现偏离时,采取措施,纠正偏差,若无法纠正,则反馈到计划层;—报告生产作业执行结果。内容: —控制加工设备完好,人员出勤;—控制加工件在工作中心加工按排定的工序加工;—保持物流稳定,控制投入和产出的工作量;—控制加工成本,结清定单,完成库存事务处理。 内容:—控制加工设备完好,人员出勤;—控制加工件在工作中心加工按排定的工序加工;—保持物流稳定,控制投入和产出的工作量;—控制加工成本,结清定单,完成库存事务处理。机

数学建模:运用Lindolingo软件求解线性规划

1、实验内容: 对下面是实际问题建立相应的数学模型,并用数学软件包Lindo/lingo 对模型进行求解。 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资. 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划.

数学建模论文 运用lindo/lingo软件求解线性规划运用lindo/lingo软件求解线性规划

一、摘要 本文要解决的问题是如何安排生产计划,即两种饮料各生产多少使获利最大。 首先,对问题进行重述明确题目的中心思想,做出合理的假设,对符号做简要的说明。 然后,对问题进行分析,根据题目的要求,建立合适的数学模型。 最后,运用lindo/lingo软件求出题目的解。 【关键词】最优解lindo/lingo软件 第二、问题的重述 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资。 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划。 第三、模型的基本假设 1、每一箱饮料消耗的人力、物力相同。 2、每个人的能力相等。 3、生产设备对生产没有影响。 第四、符号说明 1、x.....甲饮料 2、y.....乙饮料 3、z.....增加的原材料 第五、问题分析 根据题目要求:如何安排生产计划,即两种饮料各生产多少使获利最大,可知本题所求的是利润的最大值。我们可以先建立数学模型,然后用lindo/lingo软件包求解模型的最大值。

Lingo的基本应用

第十五章Lingo的基本应用1、LINDO和LINGO软件能求解的模型: 2、Lingo初级语法: 语句分行书写,顺序与数学模型一致; 每一条语句都要以“;”结尾; 语句不区分大小写,书写方式与代数函数相近; 目标函数以“min=”或者“max=”表示; 注释语句用“!”开头; “>”和“>=”以及“<”和“<=”没有区别; 如果不写明决策变量的取值范围,则默认为非负实数。 3、线性规划案例:生产计划 每天:50桶牛奶时间480小时至多加工100公斤A1 要求:制订生产计划,使每天获利最大 1)奶制品生产的Lingo模型 2)Lingo求解 2)Lingo求解报告

//结果报告(Solution Report) 4)开启灵敏度分析(Range)功能 5)查看灵敏度分析(Range) 必须先求解才能得到灵敏度分析报告 //目标函数系数范围分析 当目标函数中x1的系数(产品A1的收益)增加不超过8个单位或者减少不超过2.66667个单位时(x2系数维持不变),不需改变生产计划。 //约束条件右边值灵敏度分析

如果牛奶资源的数量增加不超过10桶或者减少不超过6.666667桶(其他模型参数不变),则它将仍然作为紧缺资源; 如果A1生产资源减少超过40个单位(其他模型参数不变),则它将转化为紧缺资源。 4、城市垃圾处理问题(最小吨*公里) 小区供水问题(最大供水收益) 代数式线性规划模型(垃圾运输) 代数式线性规划模型(小区供水)

5、如何表示具有下标的变量: 1)从C语言的类比来理解: 2)具有下标的变量可以看作某种数组变量中的元素; 3)除去下标后的符号可以看作是数组变量的名称; 4)下标可以看作是在数组中的索引值; 5)单下标变量对应于一个一维数组,称为“简单集合”; 6)多下标变量对应于一个多维数组,而多维数组可以看作是多个一维数组的笛卡尔积,称为“派生集合”。 6、Lingo中如何定义具有下标的变量? 1)在Lingo中使用“集合变量”的形式表达规划模型中具有下标的变量 2)定义集合变量需要三个基本要素: 集合的名称 集合的形式(简单集合还是派生集合?集合的元素个数是多少?) 集合变量的名称 7、定义简单集合的语法: 集合名称/下标范围/: 变量列表;(变量之间用“,”分隔) 例:brand/1..6/: a, b;(集合的名称是brand,/1..6/表示这种集合包含6个元素,下标的范围是从1到6,并且定义了两个这种集合形式的变量分别用a、b表示,该语句相当于定义了a1~a6以及b1~b6两组变量) 例:type/1..4/;(也可以只定义集合形式不定义集合变量) 8、定义派生集合的语法: 集合名称(分量集合列表): 变量列表; 1)分量集合列表分别对应于派生集合的每一个维度,定义了每一个维度分别属于哪一种简单集合 2)例:product(brand, type): p, x;(集合的名称是product,该集合的第一个维度与brand集合的类型相同,第二个维度与type 集合的类型相同,并且定义了两个集合变量p和x。如果根据前面对brand和type的定义,product集合是一个6*4的二维派生集合,该语句相当于定义了p11~p64和x11~x64两组变量) 3)例:address(country, state, city)。 9、调用集合变量的语法: 1)变量名称(下标值)”的形式调用集合变量的指定元素:pi→p(i);xij→x(i,j); 例:p(4)、x(2,3)

第1讲 Lingo软件入门(2014)

第1讲Lingo软件入门 司守奎 烟台市,海军航空工程学院数学教研室 Email:sishoukui@https://www.360docs.net/doc/a24146015.html, 1 Lingo软件的基本语法 1.1 集合 集合部分的语法为 sets: 集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1; 集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2; 派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3; endsets 例26 sets: product/A B/; machine/M N/; week/1..2/; allowed(product,machine,week):x; endsets 1.2 数据 数据部分的语法为 data: 属性1=数据列表; 属性2=数据列表; enddata 1.3 计算 计算段部分不能含有变量,必须是已知数据的运算。 calc: b=0; a=a+1; endcalc 1.4 模型的目标函数和约束条件 这里就不具体给出了,下面通过具体例子给出。 1.5 子模型 在LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO 的编程能力。 子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是: SUBMODEL mymodel: 可执行语句(约束+目标函数); ENDSUBMODEL 其中mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。 如果已经定义了子模型mymodel,则在计算段中可以用语句“@SOLVE( mymodel);”求解这个子模型。 2 Lingo函数 2.1 算术运算符

相关文档
最新文档