ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:46.61KB ,
资源ID:12898924      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12898924.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(lingo解决线性规划问题的程序经典.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

lingo解决线性规划问题的程序经典.docx

1、lingo解决线性规划问题的程序经典Lingo12软件培训(pixn)教案Lingo主要用于求解线性规划,整数(zhngsh)规划,非线性规划,V10以上版本可编程。例1 一个简单(jindn)的线性规划问题!exam_1.lg4 源程序max = 2*x+3*y; st_1 x+y350;st_2 x100; 2*x+y600; !决策(juc)变量黙认为非负; 相当于=; 大小写不区分(qfn) 当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set)下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c.sets: r1/1.3/:

2、a; r2 : b;r3 : c;link2(r1,r2): x;link3(r1,r2,r3): y;endsetsdata: ALPHA = 0.7; a=11 12 13 ; r2 = 1.3; b = 11 12 13; c = 11 12 13; enddata例2运输(ynsh)问题计算6 个发点8 个收点的最小费用运输问题。产销单位(dnwi)运价如下表。 B1B2B3B4B5B6B7B8产量A16267425960A24953858255A35219743351A47673927143A52395726541A65522814352销量3537223241324338解: 设决

3、策(juc)变量 = 第i个发点(f din)到第j个售点的运货量,i=1,2,m; j=1,2,n; 记为 =第i个发点(f din)到第j个售点的运输单价,i =1,2,m; j=1,2,n记 =第i个发点的产量, i=1,2,m; 记 =第j个售点的需求量, j=1,2,n. 其中,m = 6; n = 8.设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。于是形成如下规划问题:把上述程序翻译成LINGO语言,编制程序如下: !exam_2.lg4 源程序model: !6发点8收点运输问题;sets: rows/1.6/: s; !发点的产量(chnling)限制; col

4、s/1.8/: d; !售点的需求(xqi)限制; links(rows,cols): c, x; !运输单价(dnji),决策运输量;endsets !-; data: s = 60,55,51,43,41,52; d = 35 37 22 32 41 32 43 38; c = 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!-;min = sum(links: c*x); !目标(mbio)函数=运输(ynsh)总成本; for

5、(rows(i): sum(cols(j): x(i,j)=s(i) ); ! 产量约束;for(cols(j): sum(rows(i): x(i,j)=d(j) ); !需求约束;end例3 把上述程序进行改进,引进运行子模块和打印运算结果的语句:!exam_3.lg4 源程序model: !6发点8收点运输问题;sets: rows/1.6/: s; !发点的产量限制; cols/1.8/: d; !售点的需求限制; links(rows,cols): c, x; !运输单价,决策运输量;endsets!=;data: s = 60,55,51,43,41,52; d = 35 37 2

6、2 32 41 32 43 38; c = 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!=;submodel transfer: min = cost; ! 目标(mbio)函数极小化; cost = sum(links: c*x); !目标函数(hnsh):运输总成本; for(rows(i): sum(cols(j): x(i,j) d(j) ); !需求(xqi)约束;endsubmodel!=;calc: solve(tr

7、ansfer); !运行(ynxng)子模块(解线性规划); divert(transfer_out.txt);!向.txt文件按自定格式输出数据; write(最小运输成本=,cost,newline(1),最优运输方案x=); for(rows(i): write(newline(1);writefor(cols(j): ,format(x(i,j),3.0f) ) ); divert(); !关闭输出文件; endcalc end 打开transfer_out.txt文件,内容为:最小运输成本=664最优运输方案x= 0 19 0 0 41 0 0 0 1 0 0 32 0 0 0 0

8、0 11 0 0 0 0 40 0 0 0 0 0 0 5 0 38 34 7 0 0 0 0 0 0 0 0 22 0 0 27 3 0例4 data段的编写技巧(1):从txt文件中读取原始数据 !exam_3.lg4 源程序中的data也可以写为:data: s = file(transfer_data.txt); d = file(transfer_data.txt); c = file(transfer_data.txt); enddata其中(qzhng),transfer_data.txt的内容(nirng)为:!transfer.lg4程序(chngx)的数据;!产量(chnl

9、ing)约束s= ;60,55,51,43,41,52 !需求(xqi)约束d= ; 35 37 22 32 41 32 43 38 !运输单价c= ;6 2 6 7 4 2 9 5 4 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 !注:字符是数据分割符,若无此符,视所有数据为一个数据块,只赋给一个变量;例5lingo程序的的3种输入和3种输出方法;!exam_5.lg4的源程序;sets: rows/1.3/: ; cols/1.4/: ; link(rows,cols): a, b, m

10、at1, mat2;endsetsdata: b = 1,2,3,45,6,7,89,10,11,12; !程序内输入;a = file(a.txt); !外部txt文件输入; mat1 = ole(d:lingo12data.xls,mat1); !EXcel文件输入;enddatacalc: text(a_out.txt) = a; !列向量形式输出数据; for(link: mat2 = 2*mat1); ole(d:lingo12data.xls) = mat2 ;!把mat2输出到xls文件中的同名数据块; !向.txt文件按自定格式输出(shch)数据(参照(cnzho)前例);E

11、ndcalc例6 程序段中的循环和选择结构(jigu)举例!exam_6.lg4的源程序;sets: rows/1.5/:; cols/1.3/:; links(rows,cols):d;endsetsdata: d=0 2 3 4 3 2 1 3 2 4 7 2 2 1 6;enddatacalc: i=1; while(i#le#5: a = d(i,1);b = d(i,2); c = d(i,3); ifc(a#eq#0: write(infeasible!,newline(1); else delta = b2-4*a*c; sqrt = sqrt(if(delta#ge#0, de

12、lta,-delta); ifc(delta#ge#0: write(x1=,(-b+sqrt)/2/a, x2=,(-b-sqrt)/2/a,newline(1); else write(x1=,-b/2/a,+,sqrt/2/a,i, x2=,-b/2/a,-,sqrt/2/a,i,newline(1); ); ); i=i+1; );endcalc本程序(chngx)中的循环结构也可以用for(rows(i): 程序(chngx)体);进行计算。例7指派问题 (n人n任务费用最小)B1B2B3B4B5B6A1626742A2495385A3521974A4767392A5239572A6

13、552281解: 设决策(juc)变量=1或0, 表示第i个人是否完成(wn chng)第j项任务,i,j=1,2,n; 记 =第i个人(grn)完成第j项任务(rn wu)的费用,i,j =1,2,n; n = 6.设目标函数为总费用,约束条件为(1)每人只完成(wn chng)一项任务;(2)每项任务只由一人完成。于是形成如下规划问题:!exam_7.lg4的源程序;model: !6人6任务指派问题;sets: rows/1.6/: ; !6人6任务; links(rows,rows): c, x; !费用和决策变量;endsets !-; data: c = 6 2 6 7 4 2 4

14、 9 5 3 8 5 5 2 1 9 7 4 7 6 7 3 9 2 2 3 9 5 7 2 5 5 2 2 8 1; enddata!=;submodel appointment: min = cost; ! 目标函数(hnsh)极小化; cost = sum(links: c*x); !目标(mbio)函数:总费用; for(rows(i): sum(rows(j): x(i,j) = 1 ); !每人(mi rn)完成一项 ; for(rows(j): sum(rows(i): x(i,j)= 1 ); !每项由一人(y rn)完成; for(links: bin(x); !0-1变量(

15、binling)约束; endsubmodelsubmodel binVar: for(links: bin(x); !0-1变量约束; endsubmodel!=;calc: solve(appointment,binVar); !运行子模块(解线性规划); divert(appointment_out.txt);!向.txt文件按自定格式输出数据; write(最小指派费用=,cost,newline(1),分配方案x=); for(rows(i): write(newline(1); writefor(rows(j): ,format(x(i,j),3.0f) ) ); divert()

16、; !关闭输出文件; endcalc end例8多目标规划转化为单目标规划问题举例把上述运输问题稍加修改,考虑到运输量可以要取整数,就变成整数规划问题,而且运输问题除了成本最小一个目标以外,有时也要考虑各发点的运输量尽量均衡作为另一个目标。本程序处理的方法一是两目标加权平均,方法二是只选一个目标,另一个目标转化为约束,从而把多目标改为单目标。!exam_8.lg4 源程序;model: !6发点8收点运输问题;sets: rows/1.6/: s; !发点的产量限制; cols/1.8/: d; !售点的需求限制; links(rows,cols): c, x; !运输单价,决策运输量;end

17、sets!=;data: s = 60,55,51,43,41,52; d = 35 37 22 32 41 32 43 38; c = 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!=;submodel obj_1: min = minCost; ! 目标函数(hnsh)极小化; minCost = sum(links: c*x); !目标函数(hnsh):运输总成本; endsubmodelsubmodel obj_2: min

18、 = objValue; objValue = 0.4*obj1+0.6*obj2; ! 二目标(mbio)加权平均; obj1 = sum(links: c*x); !目标(mbio)函数1:运输(ynsh)总成本; obj2 = max1-min1; !目标函数2:发点运输量极差; for(links(i,j): sum(cols(j): x(i,j) min1 ; );endsubmodelsubmodel obj_3: min = obj2; obj2 = max1-min1; !目标函数:发点运输量极差; for(links(i,j): sum(cols(j): x(i,j) min

19、1 ; ); cost1 = sum(links: c*x); !运输总成本; cost1 1.05*minCost; !运输总成本约束; endsubmodelsubmodel subject_to_1: for(rows(i): sum(cols(j): x(i,j) d(j) ); !需求约束;endsubmodelsubmodel subject_to_2: for(links: gin(x); !整数约束;endsubmodel!=;calc: solve(obj_1, subject_to_1, subject_to_2); !运行子模块(解线性整数规划); divert(intM

20、odel_out.txt); write(newline(2),整数(zhngsh)规划的最小运输成本=,minCost,newline(1),最优运输(ynsh)方案x=); for(rows(i): write(newline(1); writefor(cols(j): , format(x(i,j), 3.0f) ) ); divert(); pause(); solve(obj_2, subject_to_1, subject_to_2); !运行子模块(m kui)(解线性整数规划); divert(intModel_out.txt, a);!向.txt文件(wnjin)追加输出数据

21、; write(newline(2),二目标(mbio)加权平均最小值=,objValue,newline(1),最优运输方案x=); for(rows(i): write(newline(1); writefor(cols(j): , format(x(i,j), 3.0f) ) ); divert(); pause(); solve(obj_3, subject_to_1, subject_to_2); !运行子模块(解线性整数规划); divert(intModel_out.txt, a);!向.txt文件追加输出数据; write(newline(2),成本约束时极差最小值=,obj2

22、,newline(1),成本约束时运输量最平均方案x=); for(rows(i): write(newline(1); writefor(cols(j): , format(x(i,j), 3.0f) ) ); divert();endcalc end本例中的运输量均衡指标,可以用方差表示,但变成非线性规划问题,只能求出局部最优解,而线性规划的最优解是全局最优解。例9杂例1model: !费波那契数列; !exam_9.lg4 源程序;sets: II/1.100/: Fi; !费波那契数列; endsets!=;submodel myProc: Fi(1) = 1; Fi(2) = 1;f

23、or(II(i)|(i#ge#3)#and#(i#le#n):Fi(i)=Fi(i-1)+Fi(i-2) );endsubmodel!=;calc: n = 10; solve(myProc); divert(Fibo_out.txt); writefor(II(k)|k#le#n: Fi(,format(k, 2.0f),)=, format(Fi(k), 3.0f),newline(1) ); divert(); endcalc end例10杂例2sets: II/1.3/:; links(II,II):a,x;endsetsdata: a = 1,2,3 2,1,4 3,2,2;endd

24、atasubmodel fMin: !求函数的极值(j zh),极小值点; min = z2+4*z+3; free(z);endsubmodelsubmodel fzero: !解方程,求函数的零点(ln din); cos(y) = y; bnd(0,y,5);endsubmodelsubmodel get_invMat: !解矩阵(j zhn)方程,求逆阵; for(II(i): for(II(j): sum(II(k):a(i,k)*x(k,j) = if(i#eq#j,1,0); for(links:free(x);endsubmodelcalc: solve(fMin); solv

25、e(fzero); solve(get_invMat);endcalcLingo编程语言参考(cnko):LINGO 有9 种类型(lixng)的函数: 1 基本运算符:包括(boku)算术运算符、逻辑运算符和关系运算符 2 数学(shxu)函数:三角函数和常规的数学函数 3 金融函数(hnsh):LINGO提供的两种金融函数 4 概率函数:LINGO提供了大量概率相关的函数 5 变量界定函数:这类函数用来定义变量的取值范围 6 集操作函数:这类函数为对集的操作提供帮助 7 集循环函数:遍历集的元素,执行一定的操作的函数 8 数据输入输出函数:允许模型和外部数据源相联系,进行数据输入输出 9 辅助函数:各种杂类函数1. 基本运算符 1.1 算术运算符 、 、 、 、1.2 逻辑运算符: #not# 否定该操作数的逻辑值,not是一个(y )一元运算符 #eq# 若两个运算(yn sun)数相等,则为true;否则为flase #ne# 若两个(lin )运算符不相等,则为true;否则为flase #gt# 若左边的运算符严格大于右边(yu bian)的运算符,则为true;否则为flase #ge# 若左边的运算符大于或等于右边(yu bian)的运算符,则为true;否则为flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase #le

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1