计算机生产销售计划lingo9篇

篇一:计算机生产销售计划lingo

  

  生产与计划多目标问题的解决---运用lingo实现求解发表时间:2020-12-09T13:15:56.297Z来源:《建筑实践》2020年7月20期

  作者:

  李佳瑜

  张钰涵

  刘晓莹[导读]多目标规划问题是最优化问题的一种,它的解题难点在于由于多个目标的存在,我们能够达到各个目标同时取得最优值的结果难以直接实现,因此多目标问题的求解多采用“化多为少”的方法

  李佳瑜

  张钰涵

  刘晓莹

  华北理工大学

  管理学院

  华北理工大学

  管理学院

  北京交通大学海滨学院

  经济管理学院06321摘要:多目标规划问题是最优化问题的一种,它的解题难点在于由于多个目标的存在,我们能够达到各个目标同时取得最优值的结果难以直接实现,因此多目标问题的求解多采用“化多为少”的方法,然而繁琐的计算过程以及结果的不理想化时常成为我们正确求解的阻碍。本文根据案例信息,运用多目标线性规划,通过建立目标函数以及对应约束条件,借助lingo软件求解运筹学中的多目标生产与计划问题,从而找到采购与加工的最优方案寻求利润的最大化。

  关键字:多目标问题;运筹学;lingo;生产与计划

  一、前言

  伴随着科学技术的不断进步与发展,大量工业化企业面临着前所未有的机遇,但同时各种挑战也接踵而来,同行之间的竞争,客户资源的流失,还有各种不可抗力的作用尤其是在此次新冠肺炎的影响下,不少企业更是面临着濒临倒闭的灭顶之灾,也因此生产与计划多目标问题的解决,利润最大化的追求越来越成为大型工业企业所关注的问题。

  生产与计划多目标问题是通过研究多个目标函数,在给定区域内实现最优化目标,其研究在现今也受到广泛关注,它的求解思路通常为化多为少,即将多目标问题转化为相对容易求解的单目标或者双目标问题。本文是通过lingo软件来求解多目标转化为单目标的生产与计划问题。现以某公司原油采购与加工问题为例介绍如何通过建模以及运用lingo解决多目标问题,具体步骤如下:

  二、案例展示

  春诚建材制造有限责任公司通过购买原材料铁矿砂经过一系列冶炼压扎复杂工艺制造钢材,现有A、B两类不同来源铁矿砂用以制造出甲、乙两种不同品质的钢材。冶炼甲钢材的最终成品需要A类铁矿砂作为原材料的最低占比为50%,乙则需要A类铁矿砂最低占比达到60%才能达到合格标准。甲乙两种钢材的市场售价分别为4800元/吨,5600元/吨。现在该建材公司库房剩余A、B两类铁矿砂库存量分别为500吨和1000吨,且按照行业规定春诚公司在市场上最多还可购买A类铁矿砂1500吨。A类铁矿砂市场价如下:采购量少于500吨时单价为10000元/吨,采购量超过500吨但少于1000吨时,超出的部分是售价为8000元/吨,超过1000吨的部分,售价为6000元/吨。信息如上,春诚建材制造有限责任公司如何安排铁矿砂的采购量以及规划甲乙钢材的加工来实现利润的最大化。

  (1)问题分析:

  首先我们要对这个问题进行分析,我们最终追求的结果是通过对公司铁矿砂采购量以及冶炼加工的规划安排来实现公司的利润最大化。通过提炼信息,我们得出本案例中所给到的信息包括:甲乙两种钢材的售价以及其原料中应含A类铁矿砂的最低比例,此外还分级的给出了A类铁矿砂的采购单价。我们需要得出的利润实质上就是销售钢材的总收入与购买A类铁矿砂的支出差,但是本案例的复杂之处在于A类铁矿砂的采购单价是分级的,它与采购量之间存在分段函数的关系,因此如何处理这部分成为本案例得以解决的关键所在。

  (2)建立模型:

  假设采购A类铁矿砂x(单位:吨),根据案例信息,采购总支出c(x)可表示为下面的分段函数(单位:千元/吨):

  我们假设生产甲、乙钢材分别使用A类铁矿砂有x11和x12(单位:吨),B类分别有x21和x22(单位:吨)用于产甲、乙钢材,我们得到总收入表达式为:5.6(x12+x22)+4.8(x11+x21)(千元)

  到此我们得出目标函数为:Maxz=4.8(x11+x21)+5.6(x12+x22)-c(x)(2)

  本案例中的约束条件包括:加工甲乙两种钢材所使用的铁矿砂A、B受到库存量的限制以及A类铁矿砂采购量的限制、甲乙中含A类铁矿砂的比例限制,具体表示为:X11+X12≤500+x(3)X21+Xx22≤1000(4)x≤1500(5)X11/(X11+X21)>=0.5(6)X12/(X12+X22)≥0.6(7)

  X11,X12,X21,X22,X>=0(8)

  由于式(1)中的c(x)是分段函数而非线性函数,因此(1)~(8)我们得出的是一个非线性规划,而非线性规划在现实中相对来说求解复杂。所以我们考虑将将A类铁矿砂的采购量x根据所给信息分为三个量,即将以价格10、8、6千元/吨采购的A类铁矿砂量表示为x1,x2,x3,则总支出c(x)变为:10x1+8x2+6x3,并且满足;x=x1+x2+x3(9)

  此时我们的目标函数(2)变成了线性函数,即:Maxz=4.8(x11+x21)+5.6(x12+x22)-(10x1+8x2+6x3)(10)

  由于A类铁矿砂以这3种价格购入的情况是否都存在是一个不确定问题,因此我们引入0-1变量,令y1=1,y2=1,y3=1分别表示以10千元/吨、8千元/吨、6千元/吨来购买A类铁矿砂,可得到:

  500y2<=x1<=500y1(11)500y3<=x2<=500y2(12)X3<=500y3(13)y1,y2,y3=0或1(14)

  (3)使用lingo求最优解:

  将(3)~(17)构成混合整数线性规划模型,我们将它输入LING0软件:代码如下:model:title:Lingo生产与计划多目标问题的求解

  Max4.8x11+4.8x21+5.6x12+5.6x22-10x1-8x2-6x3stx-x1-x2-x3=0x11+x12-x<500x21+x22<10000.5x11-0.5x21>00.4x12-0.6x22>0x1-500y1<0x2-500y2<0x3-500y3<0x1-500y2>0x2-500y3>0endinty1inty2inty3Lingo运行结果:

  由此我们得出了本案例的最优解,即采购计划:应该采购1000吨的A类铁矿砂;加工计划:应当与库存中500吨的A类铁矿砂以及1000吨的B类铁矿砂一起加工,最后总共可以生产钢材乙:2500吨,最终的利润为:5000000元。

  三、总结

  本文我们通过春诚建材制造有限责任公司的采购加工案例,实际建模同时运用lingo软件进行求解,采用将多个目标函数化解为单个目标函数的方法,得到了最终最优结果。这样不仅极大地简化了原本繁琐的求解过程,同时也大大提高了结果的准确性,因此对其他的类似多目标规划问题的求解具有一定的参考价值,对在我们企业的日常实际工作中也具有一定的现实意义。参考文献

  [1]吴有平,刘杰,何杰,多目标问题的LINGO求解法.湖南工业大学学报,2012.05,第26卷第3期,P9-P12;

  [2]姜启源,数学建模(第3版),高等教育出版社;

  [3]胡运权,运筹学教程(第3版),清华大学出版社;

  [4]刘淋,多目标问题规划的若干解法及Lingo实现.福建船政交通职业学院,2011.11,第10卷第6期,P20-P22

篇二:计算机生产销售计划lingo篇三:计算机生产销售计划lingo

  

  Lingo

  培训计划

  培训目的:了解线性规划、非线性规划和整数规划的基本概念和性质,掌握把一个实际问题转化为规划问题的步骤和思想。掌握lingo软件的使用方法,熟悉把一个规划问题输入lingo软件的方法,理解输出结果的含意。

  进度安排:

  第一天上午-理论学习

  1.Lingo12简介

  2.线性规划的概念

  3.线性规划求解方法

  4.线性规划例题

  5.Lingo软件各部分功能介绍

  6.求解线性规划例题

  7.对例题结果的解释

  8.整数规划的概念与特点

  9.整数规划例题

  10.软件求解整数规划问题

  第一天下午-机房练习

  1.安装Lingo软件,复习上午的理论知识

  2.熟悉软件的各种菜单和工具

  3.输入上午的例题,观察结果

  4.完成下列习题:

  1)一家餐厅24小时全天候营业,在各时间段中所需要的服务员数量分别为:

  2:00~6:03人

  6:00~10:09人

  10:00~14:012人

  14:00~18:05人

  18:00~22:018人

  22:00~2:04人

  设服务员在各时间段的开始时点上上班并连续工作八小时,问该餐厅至少配备多少服务员,才能满足各个时间段对人员的需要。试构造此问题的数学模型。

  -19-

  2)现要截取2.9米、2.1米和1.5米的元钢各100根,已知原材料的长度是7.4米,问应如何下料,才能使所消耗的原材料最省。试构造此问题的数学模型。

  3)某糖果厂用原料A、B、C加工成三种不同牌号的糖果甲、乙、丙。已知各种牌号糖果中A、B、C三种原料的含量要求、各种原料的单位成本、各种原料每月的限制用量、三种牌号糖果的单位加工费及售价如表1所示。问该厂每月生产这三种牌号糖果各多少千克,才能使该厂获利最大?试建立这个问题的线性规划模型。

  4)某厂在今后4个月内需租用仓库存放物资,已知各个月所需的仓库面积如表2所示。租金与租借合同的长短有关,租用的时间越长,享受的优惠越大,具体数字见表3。租借仓库的合同每月初都可办理,每份合同具体规定租用面积数和期限。因此该厂可根据需要在任何一个月初办理租借合同,且每次办理时,可签一份,也可同时签若干份租用面积和租借期限不同的合同,总的目标是使所付的租借费用最小。试根据上述要求,建立一个线性规划的数学模型。

  1234月

  份

  15102012所需面积(100m2)

  合同租借期限

  1个月

  2个月

  3个月

  4个月

  2800450060007300单位(100m2)租金(元)

  5)某农场有100公顷土地及25万元资金可用于发展生产。农场劳动力情况为秋冬季4500人日,春夏季6000人日,如劳动力本身过剩可外出打工,春夏季收入为20元/人日,秋冬季12元/人日。该农场种植三种作物:大豆、玉米和小麦,并饲养奶牛和鸡。种作物不需要专门投资,而饲养动物时每头奶牛投资8000元,每只鸡投资2元。养奶牛时每头需拨出1.5公顷土地种饲草,并占用人工秋冬季为100人日,春夏季为50人日,年净收入3000元/每头奶牛。养鸡不占土地,需人工为每只鸡秋冬季0.3人日,-20-

  春夏季0.1人日,年净收入为每只8元。农场现有鸡舍允许最多养5000只鸡,牛栏允许最多养50头奶牛,三种作物每年需要的人工及收入情况如表4所示。试决定该农场的经营方案,使年净收入最大。

  大豆

  玉米

  麦子

  203510每公顷秋冬季所需人日数

  507540每公顷春夏季所需人日数

  11001500900年净收入(元/公顷)

  -21-

  第二天上午-理论学习

  1.非线性规划模型的概念,解法

  2.Lingo软件中“集合、运算符与数学函数”的使用。

  3.复杂模型的基本构成

  4.生产销售计划问题

  5.目标规划实例分析

  6.布置下午任务

  第二天下午

  1.复习上午的理论内容

  2.实现讲过的例子

  3.完成下列习题:

  1)某企业拟生产A和B两种产品,其生产投资费用分别为2100元/t和4800元/t.A、B两种产品的利润分别为3600元/t和6500元/t,A、B产品每月的最大生产能力分别为5t和8t;市场对这两种产品总量的需求每月不少于9t。

  试问该企业应该如何安排生产计划,才能既能满足市场需求,又节约投资,而且使生产利润达到最大?2)某钢管零售商从钢管厂进货,将钢管按照顾客的要求切割后售出。从钢管厂进货时得到的原料钢管都是19米长。

  现有一客户需要50根4米长、20根6米长和15根8米长的钢管。应如何下料最节省?

  零售商如果采用的不同切割模式太多,将会导致生产过程的复杂化,从而增加生产和管理成本,所以该零售商规定采用的不同切割模式不能超过3种。此外,该客户除需要以上三种钢管外,还需要10根5米长的钢管。应如何下料最节省?

  3)

  某公司采用一套冲压设备生产一种罐装饮料的易拉罐,这种易拉罐是用镀锡板冲压制成的(参见下图)。易拉罐为圆柱形,包括罐身、上盖和下底,罐身高10厘米,上盖和下底的直径均为5厘米。该公司使用两种不同规格的镀锡板原料,规格1的镀锡板为正方形,边长24厘米;规格2的镀锡板为长

  -22-

  方形,长、宽分别为32和28厘米。由于生产设备和生产工艺的限制,对于规格1的镀镀锡板原料,只可以按照图2中的模式1、2或3进行冲压;对于规格2的镀锡板原料只能按照模式4进行冲压。使用模式1、2、3、4进行每次冲压所需要的时间分别为1.5、2、1、3(秒)。

  优化建模模式1模式2上盖罐身下底模式3模式4图5-3易拉罐下料模式该工厂每周工作40小时,每周可供使用的规格1、2的镀锡板原料分别为5万张和2万张。目前每只易拉罐的利润为0.10元,原料余料损失为0.001元

  /厘米2(如果周末有罐身、上盖或下底不能配套组装成易拉罐出售,也看作是原料余料损失)。工厂应如何安排每周的生产?

  4)有4名同学到一家公司参加三个阶段的面试:公司要求每个同学都必须首先找公司秘书初试,然后到部门主管处复试,最后到经理处参加面试,并且不允许插队(即在任何一个阶段4名同学的顺序是一样的)。由于4名同学的专业背景不同,所以每人在三个阶段的面试时间也不同,如表5-5所示(单位:分钟)。这4名同学约定他们全部面试完以后一起离开公司。假定现在时间是早晨8:00,请问他们最早何时能离开公司?

  -23-

篇四:计算机生产销售计划lingo

  

  2014~2015学年第二学期短学期

  《数学软件及应用(Lingo)》实验报告

  班级

  数学131班

  姓名

  张金库

  学号

  成绩

  实验名称

  奶制品的生产与销售计划的制定

  完成日期:2015年9月3日

  一、实验名称:

  奶制品的生产与销售计划的制定

  二、实验目的及任务

  1.

  了解并掌握LINGO的使用方法、功能与应用;

  2.

  学会利用LINGO去解决实际中的优化问题。

  三、实验内容

  问题

  一奶制品加工厂用牛奶生产

  A1,A2两种奶制品,桶牛奶可以在甲类设备上用

  12h

  加工成3kgA1,或者在乙类设备上用

  8h加工成4kgA2。根据市场的需求,生产

  A1,A2全部

  50桶

  能售出,且每千克A1获利

  24元,每千克A2获利

  16元。现在现在加工场每天能的到

  牛奶的供应,每天正式工人总的劳动时间为

  480h,并且甲类设备每天至多能加工

  100kgA1,2h和3乙类设备的加工能力没有限制。为增加工厂的利益,开发奶制品的深加工技术:用

  元加工费,可将1kgA1加工成高级奶制品

  B1,也可将

  1kgA2加工成高级奶制品

  B2,每千克

  B1能获利

  44元,每千克B2能获利

  32元。试为该工厂制订一个生产销售计划,使每天的净

  利润最大,并讨论以下问题:

  (1)若投资30元可以增加供应1桶牛奶,投资3元可以增加1h的劳动时间,应否做这些投资若每天投资150,可以赚回多少

  (2)每千克高级奶制品

  B1,B2的获利经常有10%的波动,对制订的生产销售计划有无影响若每千克B1获利下降

  10%,计划应该变化吗

  (3)若公司已经签订了每天销售

  10kgA1的合同并且必须满足,该合同对公司的利润

  有什么影响

  问题分析

  要求制定生产销售计划,决策变量可以先取作每天用多少桶牛奶生产

  A1,A2,再添上用多少千克A1加工B1,用多少千克A2加工B2,但是问题要分析B1,B2的获利对

  生产销售计划的影响,所以决策变量取作

  函数是工厂每天的净利润——

  A1,A2,B1,B2每天的销售量更为方便。目标

  A1,A2,B1,B2的获利之和扣除深加工费用。

  基本模型

  决策变量:设每天销售

  x1kgA1,x2kgA2,x3kgB1,x4kgB2,用x5kgA1加工B1,用x6kgA1加工B2。目标函数:设每天净利润为

  约束条件:

  原料供应

  z,容易写出

  z

  24x116x244x332x43x53x6。每天生产A1x1x5kg,用牛奶

  (x1x5)/3桶,每天生产A2x2x6kg,用牛

  奶(x2x6)/4桶,二者只和不超过每天的供应量

  5桶;

  劳动时间

  每天生产A1,A2的时间分别为4(x1x5)和2(x2x6),加工B1,分别为2x5和2x6,二者只和不得超过总的劳动时间

  480h;

  设备能力

  A1的生产量x1x5不超过甲类设备每天的加工能力

  100kg;

  非负约束

  x1,x2,,x6均为非负。

  附加约束

  1kgA1加工成

  B1,故

  x30.8x5,同理

  x40.75x6。由此得基本模型为:

  maxz

  24x116x244x332x43x53x6.(x1x5)/3+(x2x6)/4≤

  54(x1x5)+2(x2x6)+

  2x5+2x6≤

  48x1x5≤10x30.8x5x40.75x6x1,x2,,x6≥

  模型求解

  用LINGO软件求解,输入时为了方便将(2)、(3)分别改为

  4x13x24x33x4604x12x26x54x648LINGO程序

  model:

  max=24*x1+16*x2+44*x3+32*x4-3*x5-3*x6;

  [milk]4*x1+3*x2+4*x5+3*x6<=600;

  的时间

  (1)

  (2)

  (3)

  (4)

  (5)

  (6)

  (7)

  (7*)

  (8*)

  B

  [time]4*x1+2*x2+6*x5+4*x6<=480;

  [cpct]x1+x5<=100;

  x3=*x5;

  x4=*x6;

  end

  输入并求解,可得如下输出:

  Globaloptimalsolutionfound.

  Objectivevalue:

  Totalsolveriterations:

  Variable

  X1X2X3X4X5X6Value

  ReducedCost

  RowSlackorSurplus

  MILK

  TIME

  CPCT

  Rangesinwhichthebasisisunchanged:

  DualPrice

  ObjectiveCoefficientRanges

  Current

  VariableCoefficient

  X1X2X3X4X5Allowable

  Increase

  INFINITY

  Allowable

  Decrease

  INFINITY

  INFINITY

  X6RighthandSideRanges

  Row

  Current

  RHS

  Allowable

  Increase

  Allowable

  Decrease

  MILK

  TIME

  CPCT

  INFINITY

  INFINITY

  INFINITY

  最优解为x10,x2168,x319.2,x40,x524,x60,最优值为z=,即每天生产

  168kgA2和

  B1(不出售

  A1,B2),可获净利润元。为此,需用

  牛奶加工成A2,并且将得到的24kgA1全部加工成

  B1。8桶牛奶加工成

  A1,42桶

  结果和灵敏度分析

  利用输出中的影子价格和敏感性分析讨论以下问题:

  (1)上述结果给出,约束

  [MILK]、[TIME]的影子价格分别为和,注意到约束

  [MILK]的影子价格为(2*)右端增加

  1个单位时目标函数的增量,有(使净利润增长×12=元,约束[TIME]的影子价格说明:

  增加1h

  元。所以应该投资30元增加一桶牛奶,或投资

  增加供应五桶牛奶,可赚回×

  约束[MILK]右端的允许变化范围为(2)式可知,增加一桶牛奶可

  的劳动时间可以使净利润增长

  3元增加1h劳动时间。若每天投资

  150元,5=元。但是通过增加牛奶的数量是有限制的,输出结果表明,600-120,600+120),相当于(2)右端允许变化范围

  为(50-,50+10),即最多增加供应

  10桶牛奶。

  (2)上述输出结果给出,最优解不变的条件下目标函数系数的允许变化范围:

  x3的系

  数为(44-,44+);

  x4的系数为(32-,32+)。所以当

  B1的获利向下波动10%,或

  B2的获利向上波动

  获利下降

  10%,上面得到的生产计划将不再一定是最优的,应该重新制订。如若每千克

  B1,应该将原模型(10%)式中的x

  改为,重新计算,得到最优解为

  x10,x2160,x30,x430,x50,x640,最优值为z=3400.

  (3)上述结果的给出,变量

  x1对应的“ReducedCost

  ”严格大于

  0(为),首先表明目

  前最优解中x1的取值一定为

  0;其次,如果限定

  x1的取值大于等于某个正数,则

  x1从

  开

  始每增加一个单位时,(最优的)目标函数将减少。因此若该公司已经签订了每天销售

  的合约并且必须满足,改合同将会使该公司利润减少×

  过来理解:如果目标函数中

  格大于0的值。

  10kg

  10=元,即最优利润为元。也可以反

  x1对应的费用系数增加不小于,则在最优解中

  x1将可以取到严

  四、实验总结

  通过此次实验,我初步了解了

  LINGO软件、熟悉了LINGO软件的使用方法、功能并在实

  际中加以应用。

  LINGO软件在解决实际问题中的最优化问题十分方便。

  解题过程中

  B1,B2与A1,A2之间其实存在等式关系(5)、(6),虽然可以消掉

  2个变

  量,但是会增加人工计算,并使模型变得复杂。所以建模中尽可能的利用原始的数据信息,而把尽量多的计算留给计算机去完成。

篇五:计算机生产销售计划lingo

  

篇六:计算机生产销售计划lingo

  

  线性规划——LINGO程序集

  向浩

  2011-7-20程序一:

  Model:Max=4.8*x11+4.8*x21+5.6*x12+5.6*x22-10*x1-8*x2-6*x3;x11+x120;

  0.4*x12-0.6*x22>0;x=x1+x2+x3;

  (x1-500)*x2=0;

  (x2-500)*x3=0;

  @bnd(0,x1,500);@bnd(0,x2,500);@bnd(0,x3,500);End程序二:

  Model:SETS:Points/1..4/:b,c,y,z;!端点数为4,即分段数为3;ENDSETSDATA:b=050010001500;c=05000900012000;y=,,,0;!增加的虚拟变量y(4)=0;ENDDATAMax=4.8*x11+4.8*x21+5.6*x12+5.6*x22-@sum(Points:c*z);x11+x120;

  0.4*x12-0.6*x22>0;@sum(Points:b*z)=x;@for(Points(i)|i#eq#1:z(i)<=y(i));@for(Points(i)|i#ne#1:z(i)<=y(i-1)+y(i));@sum(Points:y)=1;@sum(Points:z)=1;@for(Points:@bin(y));End

  程序三:

  MODEL:TITLE瓶颈设备的多级生产计划;!从文本文件exam0502.LDT中读取数据;

  SETS:!PART=项目集合,Setup=生产准备费,Hold=单件库存成本,A=对瓶颈资源的消耗系数;PART/@FILE("F:\lindo\lindo书\ch05\exam0502.LDT")/:Setup,Hold,A;!TIME=计划期集合,Capacity=瓶颈设备的能力;TIME/@FILE("F:\lindo\lindo书\ch05\exam0502.LDT")/:Capacity;!USES=项目结构关系,Req=项目之间的消耗系数;USES(PART,PART):Req;!PXT=项目与时间的派生集合,Demand=外部需求,

  X=产量(批量),Y=0/1变量,INV=库存;PXT(PART,TIME):Demand,X,Y,Inv;ENDSETS!目标函数;[OBJ]Min=@sum(PXT(i,t):

  setup(i)*Y(i,t)+hold(i)*Inv(i,t));!物流平衡方程;@FOR(PXT(i,t)|t#NE#1:[Bal]

  Inv(i,t-1)+X(i,t)-Inv(i,t)=Demand(i,t)+

  @SUM(USES(i,j):Req(i,j)*X(j,t)));@FOR(PXT(i,t)|t#eq#1:[Ba0]

  X(i,t)-Inv(i,t)=Demand(i,t)+

  @SUM(USES(i,j):Req(i,j)*X(j,t)));!能力约束;@FOR(TIME(t):

  [Cap]@SUM(PART(i):A(i)*X(i,t))

  !其他约束;M=25000;@FOR(PXT(i,t):X(i,t)<=M*Y(i,t));@FOR(PXT:@BIN(Y));DATA:Demand=@FILE("F:\lindo\lindo书\ch05\exam0502.LDT");

  Capacity=@FILE("F:\lindo\lindo书\ch05\exam0502.LDT");

  Setup=@FILE("F:\lindo\lindo书\ch05\exam0502.LDT");

  Hold=@FILE("F:\lindo\lindo书\ch05\exam0502.LDT");

  A=@FILE("F:\lindo\lindo书\ch05\exam0502.LDT");

  Req=@FILE("F:\lindo\lindo书\ch05\exam0502.LDT");ENDDATA程序四:

  model:Title钢管下料

  -最小化钢管根数的LINGO模型;SETS:

  NEEDS/1..4/:LENGTH,NUM;

  !定义基本集合NEEDS及其属性LENGTH,NUM;CUTS/1..3/:X;

  !定义基本集合CUTS及其属性X;PATTERNS(NEEDS,CUTS):R;

  !定义派生集合PATTERNS(这是一个稠密集合)及其属性R;ENDSETSDATA:

  LENGTH=4568;

  NUM=50102015;

  CAPACITY=19;ENDDATAmin=@SUM(CUTS(I):X(I));

  !目标函数;@FOR(NEEDS(I):@SUM(CUTS(J):X(J)*R(I,J))>NUM(I));

  !满足需求约束;@FOR(CUTS(J):@SUM(NEEDS(I):LENGTH(I)*R(I,J))

  !合理切割模式约束;@FOR(CUTS(J):@SUM(NEEDS(I):LENGTH(I)*R(I,J))>CAPACITY

  -@MIN(NEEDS(I):LENGTH(I)));

  !合理切割模式约束;@SUM(CUTS(I):X(I))>26;@SUM(CUTS(I):X(I))<31;

  !人为增加约束;@FOR(CUTS(I)|I#LT#@SIZE(CUTS):X(I)>X(I+1));

  !人为增加约束;@FOR(CUTS(J):@GIN(X(J)));@FOR(PATTERNS(I,J):@GIN(R(I,J)));end程序五:

  model:Title面试问题;SETS:!Person=被面试者集合,Stage=面试阶段的集合;Person/@FILE(exam0505.txt)/;Stage/@FILE(exam0505.txt)/;!T=已知的面试所需要的时间,X=面试开始时间;PXS(Person,Stage):T,X;!Y(i,k)=1:k排在i前,0:否则;PXP(Person,Person)|&1#LT#&2:Y;ENDSETSDATA:T=@FILE(exam0505.txt);ENDDATA[obj]min=MAXT;!MAXT是面试的最后结束时间;MAXT>=@max(PXS(i,j)|j#EQ#@size(stage):x(i,j)+t(i,j));!只有参加完前一个阶段的面试后才能进入下一个阶段;

  @for(PXS(i,j)|j#LT#@size(stage):[ORDER]x(i,j)+t(i,j)

  @for(PXP(i,k):[SORT1]x(i,j)+t(i,j)-x(k,j)

  @for(PXP(i,k):[SORT2]x(k,j)+t(k,j)-x(i,j)

  程序六:

  MODEL:TITLE飞机定位模型3;SETS:VOR/1..3/:x,y,cita,sigma,alpha;ENDSETSDATA:x,y,cita,sigma=74613932.813470.01406293750.787140.010515712595.393070.0227;x4y4d4sigma4=155987864.3ENDDATAINIT:xx,yy=980.6926,731.5666;ENDINIT2.0;!XX,YY表示飞机坐标;@for(vor:@tan(alpha)=(xx-x)/(yy-y));min=@sum(VOR:((alpha-cita)/sigma)^2)

  +((d4-((xx-x4)^2+(yy-y4)^2)^.5)/sigma4)^2;END

  程序七:

  MODEL:TITLE交通流均衡;SETS:

  ROAD/AB,AC,BC,BD,CD/:Y;

  CAR/2,3,4/;

  LINK(CAR,ROAD):T,X;ENDSETSDATA:

  !行驶时间(分钟);!T=20,52,12,52,230,53,13,53,340,54,14,54,40;

  !增加的总行驶时间(千辆车*分钟);

  T=2052125225055155557057175770;ENDDATA[OBJ]MIN=@SUM(LINK:T*X);!目标函数;!四个节点的流量守恒条件;[NODE_A]Y(@INDEX(AB))+Y(@INDEX(AC))=6;[NODE_B]Y(@INDEX(AB))=Y(@INDEX(BC))+Y(@INDEX(BD));[NODE_C]Y(@INDEX(AC))+Y(@INDEX(BC))=Y(@INDEX(CD));[NODE_D]Y(@INDEX(BD))+Y(@INDEX(CD))=6;!每条道路上的总流量Y等于该道路上的分流量X的和;@FOR(ROAD(I):

  [ROAD_LIM]@SUM(CAR(J):X(J,I))=Y(I));!每条道路的分流量X的上下界设定;@FOR(LINK(I,J)|I#EQ#1:@BND(0,X(I,J),2));@FOR(LINK(I,J)|I#GT#1:@BND(0,X(I,J),1));END程序八:

  MODEL:Title简单的投资组合模型;SETS:

  YEAR/1..12/;

  STOCKS/A,

  B,

  C/:Mean,X;

  link(YEAR,STOCKS):R;

  STST(Stocks,stocks):COV;ENDSETSDATA:

  TARGET=1.15;!R是原始数据;

  R=

  1.301.2251.141.1031.291.261.2161.2161.410.9540.720.9220.921.1441.161.0561.100.9651.031.3211.1331.081.3051.7321.091.1951.0211.0831.391.1311.0350.921.0061.1761.7151.908;ENDDATA

  CALC:!计算均值向量Mean与协方差矩阵COV;@for(stocks(i):Mean(i)=

  @sum(year(j):R(j,i))/@size(year));

  @for(stst(i,j):COV(i,j)=@sum(year(k):

  (R(k,i)-mean(i))*(R(k,j)-mean(j)))/(@size(year)-1));ENDCALC[OBJ]MIN=@sum(STST(i,j):COV(i,j)*x(i)*x(j));[ONE]@SUM(STOCKS:X)=1;[TWO]@SUM(stocks:mean*x)>=TARGET;END程序九:

  MODEL:Title含有国库券的投资组合模型;SETS:

  STOCKS/A,

  B,

  C,D/:Mean,X;

  STST(Stocks,stocks):COV;ENDSETSDATA:

  TARGET=1.1;!1.15;!Mean是收益均值,COV是协方差矩阵;

  mean=1.0890831.213661.2345831.05;

  COV=0.010807540.012407210.013075130.012407210.058391700.055426390.013075130.055426390.09422681ENDDATA[OBJ]MIN=@sum(STST(i,j):COV(i,j)*x(i)*x(j));[ONE]@SUM(STOCKS:X)=1;[TWO]@SUM(stocks:mean*x)>=TARGET;END

  程序十:

  MODEL:Title考虑交易费的投资组合模型;SETS:

  STOCKS/A,

  B,

  C/:C,Mean,X,Y,Z;

  STST(Stocks,stocks):COV;ENDSETSDATA:

  TARGET=1.15;!股票的初始份额;

  c=0.50.350.15;

  !Mean是收益均值,COV是协方差矩阵;

  mean=1.0890831.213661.234583;

  0;

  COV=0.010807540.012407210.013075130.012407210.058391700.05542630.013075130.055426390.09422681;ENDDATA[OBJ]MIN=@sum(STST(i,j):COV(i,j)*x(i)*x(j));[ONE]@SUM(STOCKS:X+0.01*Y+0.01*Z)=1;[TWO]@SUM(stocks:mean*x)>=TARGET;@FOR(stocks:[ADD]x=c-y+z);END程序十一:

  MODEL:Title利用股票指数简化投资组合模型;SETS:

  STOCKS/A,

  B,

  C/:u,b,s2,x;ENDSETSDATA:!mean0,s20,u,b,s2是线性回归的结果数据;mean0=1.191458;s20=0.02873661;s2=0.005748320,0.01564263,0.03025165;u

  =0.5639761,

  -0.2635059,-0.5809590;b

  =0.4407264,

  1.239802,

  1.523798;ENDDATA[OBJ]MIN=s20*y*y+@sum(stocks:s2*x*x);

  ![OBJ]MIN=s20*@sqr(y)+@sum(stocks:s2*@sqr(x));

  @sum(stocks:b*x)=y;@sum(stocks:x)=1;@sum(stocks:(u+b*mean0)*x)>1.15;END

  程序十二:

  MODEL:TITLE新产品的市场预测;SETS:

  PROD/ABCD/:P;

  LINK(PROD,PROD):T;ENDSETSDATA:!转移概率矩阵;

  T=.75.1.05.1.4.2.1.3.1.2.4.3.2.2.3.3;ENDDATA@FOR(PROD(I)|I#LT#@SIZE(PROD):

  !去掉了一个冗余约束;

  P(I)=@SUM(LINK(J,I):P(J)*T(J,I)));@SUM(PROD:P)=1;@FOR(PROD(I):

  @WARN("输入矩阵的每行之和必须是1",

  @ABS(1-@SUM(LINK(I,J):T(I,J)))

  #GT#.000001););END

  程序十三:

  MODEL:TITLE产品属性的效用函数;SETS:

  PRICE/H,M,L/:P;

  SAFETY/2,1,0/:Q;

  M(safety,PRICE):C0;

  MM(M,M)|C0(&1,&2)#LT#C0(&3,&4):ERROR;ENDSETSDATA:

  C0=5;ENDDATA@FOR(MM(i,j,k,l):ERROR(i,j,k,l)>=

  1+(P(j)+Q(i))-(P(l)+Q(k)));[obj]MIN=@SUM(mm:ERROR);END程序十四:

  MODEL:TITLE最小二乘法计算产品属性的效用函数;SETS:

  PRICE/H,M,L/:P;

  SAFETY/2,1,0/:Q;

  M(safety,PRICE):C0,ERROR,sort;ENDSETSDATA:

  C0=5;ENDDATA@FOR(M(i,j):sort(i,j)=p(j)+q(i);

  ERROR(i,j)=sort(i,j)-C0(i,j));MIN=@SUM(M:@sqr(ERROR));![obj]MIN=@SUM(M:ERROR^2);@FOR(M(i,j):@FREE(ERROR));!@FOR(price:@gin(P));!@FOR(safety:@gin(Q));END

  程序十五:

  MODEL:TITLE机票销售计划;SETS:

  route/AH,AB,AC,HB,HC/:a,b,p,q,x,y;ENDSETSDATA:

  apbq=332412441619024426114018656436769179019319980103;

  c1c2c3=120100110;ENDDATA[obj]Max=@SUM(route:p*x+q*y);

  @SUM(route(i)|i#ne#4#and#i#ne#5:x(i)+y(i))

  

  

  程序十六:

  !3Warehouse,4CustomerTransportationProblem;sets:

  Warehouse/1..3/:a;

  Customer

  /1..4/:b;

  Routes(Warehouse,Customer):c,x;endsets!Herearetheparameters;data:

  a=30,25,21;

  b=15,17,22,12;

  c=

  6,

  2,

  6,

  7,

  4,

  9,

  5,

  3,

  8,

  8,

  1,

  5;enddata!Theobjective;[OBJ]min=@sum(Routes:c*x);!Thesupplyconstraints;@for(Warehouse(i):[SUP]

  @sum(Customer(j):x(i,j))<=a(i));!Thedemandconstraints;@for(Customer(j):[DEM]

  @sum(Warehouse(i):x(i,j))=b(j));程序十七:

  !AssignmentProblemModel;sets:

  Flight/1..6/;

  Assign(Flight,Flight):c,x;endsets!Hereisincomematrix;data:

  c=2151611533121211631312112114-92132-9-9-91113;enddata

  !Maximizevalveofassignments;max=@sum(Assign:c*x);@for(Flight(i):

  !

  Eachimustbeassignedtosomej;

  @sum(Flight(j):x(i,j))=1;!

  EachImustreceiveanassignment;

  @sum(Flight(j):x(j,i))=1;);程序十八:

  !2plants,3warehousesand4customers

  TransshipmentProblem;sets:

  Plant

  /A,B/:produce;

  Warhouse/x,y,z/;

  Customer/1..4/:require;

  LinkI

  (Plant,Warhouse):cI,xI;

  LinkII(Warhouse,Customer):cII,xII;endsets!Herearetheparameters;data:

  produce=9,8;

  require=3,5,4,5;

  cI

  =1,2,100,

  3,1,

  2;

  cII=5,7,100,100,

  9,6,

  7,100,

  100,8,

  7,

  4;

  enddata!Theobjective;[OBJ]min=@sum(LinkI:cI*xI)+@sum(LinkII:cII*xII);!Thesupplyconstraints;@for(Plant(i):[SUP]

  @sum(Warhouse(j):xI(i,j))<=produce(i));!Thewarhouseconstraints;@for(Warhouse(j):[MID]

  @sum(Plant(i):xI(i,j))=@sum(Customer(k):xII(j,k)));!Thedemandconstraints;@for(Customer(k):[DEM]

  @sum(Warhouse(j):xII(j,k))=require(k));

  !2plants,3warehousesand4customers

  TransshipmentProblem;sets:

  Plant

  /A,B/:produce;

  Warhouse/x,y,z/;

  Customer/1..4/:require;

  Link

  (Plant,Warhouse,Customer):poss,cost,x;endsets!Herearetheparameters;data:

  produce=9,8;

  require=3,5,4,5;

  poss=1,1,0,0,

  1,1,1,0,

  0,0,0,0,

  1,1,0,0,

  1,1,1,0,

  0,1,1,1;

  cost=6,8,0,0,

  11,8,9,0,

  0,0,0,0,

  8,10,0,0,

  10,7,8,0,

  0,10,9,6;enddata!Theobjective;[OBJ]min=@sum(Link:poss*cost*x);!Thesupplyconstraints;@for(Plant(i):[SUP]

  @sum(Warhouse(j):

  @sum(Customer(k):poss(i,j,k)*x(i,j,k)))<=produce(i));

  !Thedemandconstraints;@for(Customer(k):[DEM]

  @sum(Plant(i):

  @sum(Warhouse(j):poss(i,j,k)*x(i,j,k)))=require(k));程序十九:

  !Wehaveanetworkof7cities.Wewanttofind

  thelengthoftheshortestroutefromcity1tocity7;

  sets:

  !Hereisourprimitivesetofsevencities;

  cities/A,B1,B2,C1,C2,C3,D/;

  !TheDerivedset"roads"liststheroadsthat

  existbetweenthecities;

  roads(cities,cities)/

  A,B1A,B2B1,C1B1,C2B1,C3B2,C1C1,D

  C2,D

  C3,D/:w,x;endsets

  data:

  !Herearethedistancesthatcorrespond

  toabovelinks;

  w=24;enddata

  n=@size(cities);!Thenumberofcities;min=@sum(roads:w*x);@for(cities(i)|i#ne#1#and#i#ne#n:

  @sum(roads(i,j):x(i,j))=@sum(roads(j,i):x(j,i)));@sum(roads(i,j)|i#eq#1:x(i,j))=1;程序二十:

  sets:

  cities/1..11/;

  roads(cities,cities):p,w,x;endsetsdata:

  p=011100000000101000000101111000001000100001100101100010101010001101001100001000101B2,C2B2,C3000011110110000001010100000000000;

  w=02810000002060100000860751200010700090000150030290001030406000290400310000200070000096370120000001010400000009240;enddatan=@size(cities);min=@sum(roads:w*x);@for(cities(i)|i#ne#1#and#i#ne#n:

  @sum(cities(j):p(i,j)*x(i,j))=@sum(cities(j):p(j,i)*x(j,i)));@sum(cities(j):p(1,j)*x(1,j))=1;

  程序二十一:

  sets:

  nodes/s,1,2,3,4,t/;

  arcs(nodes,nodes)/

  s,1s,21,21,32,43,23,t

  4,34,t/:c,f;endsetsdata:

  c=

  10;enddatamax=flow;@for(nodes(i)|i#ne#1#and#i#ne#@size(nodes):

  @sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=0);@sum(arcs(i,j)|i#eq#1:f(i,j))=flow;@for(arcs:@bnd(0,f,c));程序二十二:

  sets:

  nodes/s,1,2,3,4,t/;

  arcs(nodes,nodes):p,c,f;endsetsdata:

  p=011000011000001001001000101000000;

  c=087000059000009002005000601000000;enddatamax=flow;@for(nodes(i)|i#ne#1#and#i#ne#@size(nodes):

  @sum(nodes(j):p(i,j)*f(i,j))=@sum(nodes(j):p(j,i)*f(j,i)));@sum(nodes(i):p(1,i)*f(1,i))=flow;@for(arcs:@bnd(0,f,c));程序二十三:

  sets:

  nodes/s,1,2,3,4,t/:d;

  arcs(nodes,nodes)/

  s,1s,21,21,32,43,23,t

  4,34,t/:c,u,f;endsetsdata:

  d=14-14;

  c=

  7;

  u=

  10;enddatamin=@sum(arcs:c*f);@for(nodes(i)|i#ne#1#and#i#ne#@size(nodes):

  @sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=d(i));@sum(arcs(i,j)|i#eq#1:f(i,j))=d(1);@for(arcs:@bnd(0,f,u));程序二十四:

  sets:

  cities/1..10/:level;!level(i)=thelevelofcity;

  link(cities,cities):

  distance,!Thedistancematrix;

  x;

  !x(i,j)=1ifweuselinki,j;endsetsdata:

  !Distancematrix,itneednotbesymmetirc;

  distance=912141216172291516811181422911712121915317171515121681615151481119148161211710161116181261401111171412151561101222217151516111110;enddatan=@size(cities);!Themodelsize;!Minimizetotaldistanceofthelinks;min=@sum(link(i,j)|i#ne#j:distance(i,j)*x(i,j));!Theremustbeanarcoutofcity1;@sum(cities(i)|i#gt#1:x(1,i))>=1;!Forcityi,exceptthebase(city1);@for(cities(i)|i#gt#1:!

  Itmustbeentered;

  @sum(cities(j)|j#ne#i:x(j,i))=1;!

  level(j)=levle(i)+1,ifwelinkjandi;

  @for(cities(j)|j#gt#1#and#j#ne#i:

  level(j)>=level(i)+x(i,j)

  -(n-2)*(1-x(i,j))+(n-3)*x(j,i););!

  Thelevelofcityisatleast1butnomoren-1,

  andis1ifitlinkstobase(city1);

  @bnd(1,level(i),999999);

  level(i)<=n-1-(n-2)*x(1,i););!Makethex"s0/1;@for(link:@bin(x));

  程序二十五:

  sets:

  cities/1..10/:level;!level(i)=thelevelofcity;

  link(cities,cities):

  distance,!Thedistancematrix;

  x;

  !x(i,j)=1ifweuselinki,j;endsetsdata:

  !Distancematrix,itneednotbesymmetirc;

  distance=912141216172291516811181422911712121915317171515121681615151481119148161211710161116181261401111171412151561101222217151516111110;enddatan=@size(cities);!Themodelsize;!Minimizetotaldistanceofthelinks;min=@sum(link(i,j)|i#ne#j:distance(i,j)*x(i,j));!Theremustbeanarcoutofcity1;@sum(cities(i)|i#gt#1:x(1,i))>=1;!Forcityi,exceptthebase(city1);@for(cities(i)|i#gt#1:!

  Itmustbeentered;

  @sum(cities(j)|j#ne#i:x(j,i))=1;!

  level(j)=levle(i)+1,ifwelinkjandi;

  @for(cities(j)|j#gt#1#and#j#ne#i:

  level(j)>=level(i)+x(i,j)

  -(n-2)*(1-x(i,j))+(n-3)*x(j,i););!

  Thelevelofcityisatleast1butnomoren-1,

  andis1ifitlinkstobase(city1);

  @bnd(1,level(i),999999);

  level(i)<=n-1-(n-2)*x(1,i););!Makethex"s0/1;@for(link:@bin(x));程序二十六:

  sets:

  cities/1..10/:level;!level(i)=thelevelofcity;

  link(cities,cities):

  distance,!Thedistancematrix;

  x;

  !x(i,j)=1ifweuselinki,j;endsetsdata:

  !Distancematrix,itneednotbesymmetirc;

  distance=912141216172291516811181422911712121915317171515121681615151481119148161211710161116181261401111171412151561101222217151516111110;enddatan=@size(cities);!Themodelsize;

  !Minimizetotaldistanceofthelinks;min=@sum(link(i,j)|i#ne#j:distance(i,j)*x(i,j));!Forcityi;@for(cities(i):!

  Itmustbeentered;

  @sum(cities(j)|j#ne#i:x(j,i))=1;!

  Itmustbedeparted;

  @sum(cities(j)|j#ne#i:x(i,j))=1;!

  level(j)=levle(i)+1,ifwelinkjandi;

  @for(cities(j)|j#gt#1#and#j#ne#i:

  level(j)>=level(i)+x(i,j)

  -(n-2)*(1-x(i,j))+(n-3)*x(j,i);););!Makethex"s0/1;@for(link:@bin(x));!Forthefirstandlaststop;@for(cities(i)|i#gt#1:

  level(i)<=n-1-(n-2)*x(1,i);

  level(i)>=1+(n-2)*x(i,1););程序二十九:

  sets:

  events/1..8/:d;

  operate(events,events)/

  !A

  B

  C

  D

  E

  F

  G

  H

  I

  1,21,31,43,42,53,54,65,65,85,76,77,86,/:a,m,b,et,dt,x;endsetsdata:

  a=

  1261m=

  111623325b=

  1614125232d=

  -1;

  limit=52;enddata@for(operate:

  et=(a+4*m+b)/6;

  dt=(b-a)^2/36;);max=Tbar;Tbar=@sum(operate:et*x);@for(events(i):

  @sum(operate(i,j):x(i,j))-@sum(operate(j,i):x(j,i))J

  K;1211;1521;125;

  =d(i););S^2=@sum(operate:dt*x);p=@psn((limit-Tbar)/S);@psn((days-Tbar)/S)=0.95;

  程序三十:

  sets:

  Level/1..3/:P,z,Goal;

  Variable/1..2/:x;

  H_Con_Num/1..1/:b;

  S_Con_Num/1..4/:g,dplus,dminus;

  H_Cons(H_Con_Num,Variable):A;

  S_Cons(S_Con_Num,Variable):C;

  Obj(Level,S_Con_Num):Wplus,Wminus;endsetsdata:

  P=???;

  Goal=??0;

  b=12;

  g=

  150001615;

  A=

  2;

  C=

  20302-15;

  Wplus=

  0000100031;

  Wminus=1000100030;enddata

  min=@sum(Level:P*z);@for(Level(i):

  z(i)=@sum(S_Con_Num(j):Wplus(i,j)*dplus(j))

  +@sum(S_Con_Num(j):Wminus(i,j)*dminus(j)));@for(H_Con_Num(i):

  @sum(Variable(j):A(i,j)*x(j))<=b(i));@for(S_Con_Num(i):

  @sum(Variable(j):C(i,j)*x(j))

  +dminus(i)-dplus(i)=g(i););@for(Level(i)|i#lt#@size(Level):

  @bnd(0,z(i),Goal(i)););

  程序三十一:

  sets:

  Level/1..4/:P,z,Goal;

  Variable/1..2/:x;

  S_Con_Num/1..4/:g,dplus,dminus;

  S_Cons(S_Con_Num,Variable):C;

  Obj(Level,S_Con_Num):Wplus,Wminus;endsetsdata:

  P=????;

  Goal=?,?,?,0;

  g=

  27500800320900;

  C=2510100110;

  Wplus=

  00000010000130;

  Wminus=1000000210000;enddata

  min=@sum(Level:P*z);@for(Level(i):

  z(i)=@sum(S_Con_Num(j):Wplus(i,j)*dplus(j))

  +@sum(S_Con_Num(j):Wminus(i,j)*dminus(j)));@for(S_Con_Num(i):

  @sum(Variable(j):C(i,j)*x(j))

  +dminus(i)-dplus(i)=g(i););@for(Level(i)|i#lt#@size(Level):

  @bnd(0,z(i),Goal(i)););程序三十二:

  sets:

  Level/1..5/:P,z,Goal;

  Variable/1..3/:x;

  S_Con_Num/1..8/:g,dplus,dminus;

  S_Cons(S_Con_Num,Variable):C;

  Obj(Level,S_Con_Num):Wplus,Wminus;endsets

  data:

  P=?????;

  Goal=?,?,?,?,0;

  g=17005050801001201001900;

  C=58121000100011000100015812;

  Wplus=

  0000000000000000000001000000010000000;

  Wminus=10020182100020182100;enddata

  min=@sum(Level:P*z);@for(Level(i):

  z(i)=@sum(S_Con_Num(j):Wplus(i,j)*dplus(j))

  +@sum(S_Con_Num(j):Wminus(i,j)*dminus(j)));@for(S_Con_Num(i):

  @sum(Variable(j):C(i,j)*x(j))

  +dminus(i)-dplus(i)=g(i););@for(Level(i)|i#lt#@size(Level):

  @bnd(0,z(i),Goal(i)););

  程序三十二:

  sets:

  Level/1..8/:P,z,Goal;

  S_Con_Num/1..13/:dplus,dminus;

  Plant/1..3/:a;

  Customer/1..4/:b;

  Routes(Plant,Customer):c,x;endsetsdata:

  P=????????;

  Goal=???????0;

  a=300200400;

  b=200100450250;

  c=

  3;enddatamin=@sum(Level:P*z);z(1)=dminus(9);z(2)=dminus(1);z(3)=dminus(2)+dminus(3)+dminus(4)+dminus(5);z(4)=dminus(6)+dminus(7)+dminus(8)+dminus(9);z(5)=dplus(10);z(6)=dplus(11);z(7)=dminus(12)+dplus(12);z(8)=dplus(13);

  @for(Plant(i):

  @sum(Customer(j):x(i,j))<=a(i));x(3,1)+dminus(1)-dplus(1)=100;@for(Customer(j):

  @sum(Plant(i):x(i,j))+dminus(1+j)-dplus(1+j)=0.8*b(j);

  @sum(Plant(i):x(i,j))+dminus(5+j)-dplus(5+j)=b(j););@sum(Routes:c*x)+dminus(10)-dplus(10)=3245;x(2,4)+dminus(11)-dplus(11)=0;@sum(Plant(i):x(i,1))-20/45*@sum(Plant(i):x(i,3))

  +dminus(12)-dplus(12)=0;@sum(Routes:c*x)+dminus(13)-dplus(13)=2950;@for(Level(i)|i#lt#@size(Level):

  @bnd(0,z(i),Goal(i)););程序三十三:

  sets:

  optA/1..3/:x;

  optB/1..3/:y;

  AXB(optA,optB):Ca,Cb;endsetsdata:

  Ca=141312131212121213;

  Cb=131415141515151514;enddataVa=@sum(AXB(i,j):Ca(i,j)*x(i)*y(j));

  Vb=@sum(AXB(i,j):Cb(i,j)*x(i)*y(j));@for(optA(i):

  @sum(optB(j):Ca(i,j)*y(j))<=Va);@for(optB(j):

  @sum(optA(i):Cb(i,j)*x(i))<=Vb);@sum(optA:x)=1;@sum(optB:y)=1;@free(Va);@free(Vb);程序三十四:

  sets:

  order/1..99/:TC,EOQ;endsets

  @for(order(i):

  EOQ(i)=D/i;

  TC(i)=0.5*C_P*EOQ(i)+C_D*D/EOQ(i););TC_min=@min(order:TC);Q=@sum(order(i):EOQ(i)*(TC_min#eq#TC(i)));N=D/Q;

  data:

  C_D=12000;

  D=96000;

  C_P=3.6;enddata

  程序三十五:

  sets:

  order/1..99/:TC,EOQ,EOS;endsets

  @for(order(i):

  EOQ(i)=D/i;

  EOS(i)=C_P/(C_p+C_S)*EOQ(i);

  TC(i)=0.5*C_P*(EOQ(i)-EOS(i))^2/EOQ(i)+C_D*D/EOQ(i)

  +0.5*C_S*EOS(i)^2/EOQ(i););TC_min=@min(order:TC);Q=@sum(order(i):EOQ(i)*(TC_min#eq#TC(i)));S=@sum(order(i):EOS(i)*(TC_min#eq#TC(i)));N=D/Q;

  data:

  C_D=12000;

  D=96000;

  C_P=3.6;

  C_S=13.2;Enddata程序三十六:

  sets:

  range/1..4/:B,C,C_P,

  EOQ,Q,TC;endsets

  data:

  D=40000;

  C_D=9000;

  R=.2;

  B=

  10000,

  20000,

  30000,

  40000;

  C=35.225,34.525,34.175,33.825;enddata

  @for(range:

  C_P=R*C;

  EOQ=(2*C_D*D/C_P)^0.5;);Q(1)=EOQ(1)-(EOQ(1)-B(1)+1)*(EOQ(1)#ge#B(1));@for(range(i)|i#gt#1:

  Q(i)=EOQ(i)+(B(i-1)-EOQ(i))*(EOQ(i)#lt#B(i-1))

  -(EOQ(i)-B(i)+1)*(EOQ(i)#ge#B(i)););@for(range(i):

  TC(i)=0.5*C_P(i)*Q(i)+C_D*D/Q(i)+C(i)*D);TC_min=@min(range:TC);Q_star=@sum(range:Q*(TC#eq#TC_min));T_star=Q_star/D;

  程序三十七:

  MODEL:TITLE飞行管理问题的非线性规划模型;SETS:Plane/1..6/:x0,y0,cita0,cita1,d_cita;!cita0表示初始角度,cita1为调整后的角度,d_cita为调整的角度;link(plane,plane)|&1#LT#&2:b,c;ENDSETSDATA:x0y0cita0=15085140852432361501451300155501500220.515923052;

  max_cita=30;T_max=0.283;V=800;ENDDATAINIT:d_cita=000000;ENDINIT@for(plane:cita1-cita0=d_cita);@for(link(i,j):

  b(i,j)=-2*(x0(i)-x0(j))*@sin((cita1(i)+cita1(j))*3.14159265/360)

  +2*(y0(i)-y0(j))*@cos((cita1(i)+cita1(j))*3.14159265/360);

  c(i,j)=(x0(i)-x0(j))^2+(y0(i)-y0(j))^2-64;);!避免碰撞的条件;!右端点非负;@for(link(i,j):[Right]

  (2*V*T_max*@sin((cita1(i)-cita1(j))*3.14159265/360))^2+b(i,j)*(2*V*T_max*@sin((cita1(i)-cita1(j))*3.14159265/360))

  +c(i,j)>0);!最小点非负;@for(link(i,j):[Minimum]@if(-b(i,j)/4/V/@sin((cita1(i)-cita1(j))*3.14159265/360)#gt#0#and#

  -b(i,j)/4/V/@sin((cita1(i)-cita1(j))*3.14159265/360)#lt#T_max,

  b(i,j)^2-4*c(i,j),-1)<0);@for(link:@free(b));!调整角度上下限,单位为角度;@for(plane:@bnd(-max_cita,d_cita,max_cita));[obj]MIN=@SUM(plane:(d_cita)^2);

  END

  程序三十九:

  model:!铁路运输网的运费计算;SETS:

  !NOTES表示节点集合;

  NODES/S1,S2,S3,S4,S5,S6,S7,

  A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,

  B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/;

  !派生集合ROADS表示的是网络中的直接连接的道路(弧),由于并非所有节点间都有道路直接连接,所以将弧具体列出,这是稀疏集合;ROADS(NODES,NODES)/

  !要铺设的管道;

  A1,A2A2,A3A3,A4A4,A5A5,A6A6,A7A7,A8A8,A9A9,A10A10,A11A11,A12A12,A13A13,A14A14,A15!公路网;

  B1,A2B2,A3B5,A4B4,A5B6,A6B7,A7S1,A7B8,A8B9,A9,B10,A10,

  B11,A11B13,A12B15,A13S6,A14B16,A14B17,A15S7,A15!铁路网;

  B1,B3B2,B3B3,B5B4,B6B6,B7B7,S1B5,B8B8,S1B8,S2B8,BB9,S3B9,B10B10,B12B12,B11B11,S5B12,S4B12,B14B14,B13B14,B15B15,B16B16,S6B16,B17B17,S!距离W0(i,j)是节点i到j的直接距离(已知);

  /:W0;

  !属性W表示基本的权矩阵(直接距离),

  D1(i,j)表示节点i到j的最优行驶路线的路长,

  C1(i,j)表示节点i到j铁路运输的最小单位运价(万元);LINK(NODES,NODES):W,D1,C1;!属性U表示迭代过程的权矩阵(临时标号);NNN(Nodes,nodes,nodes):U;ENDSETSDATA:!针对铁路网计算时,将公路网的距离定为充分大(BIG=20000);BIG=20000;

  W0=

  200002000020000200002000020000200002000020000200020000200002000020002000020000200002000020000200002000020000200002000200002000020000200002000020000200045811530619521107269521784626916321672930;!输出费用C1到文本文件中,以备后用;@TEXT(TrainCost.txt)=@writefor(nodes(i):@writefor(nodes(j):

  @format(c1(i,j),"5.0f")),@newline(1));ENDDATA

  CALC:!无向网络,根据给定的直接距离具有对称性,得到初始距离矩阵;@FOR(LINK(i,j)|@IN(ROADS,i,j):W(i,j)=

  W0(i,j);W(j,i)=

  W0(i,j););

  @FOR(LINK(i,j)|i#eq#j:W(i,j)=);

  !所有无直接连接的节点间的距离定为充分大;@FOR(LINK(i,j)|i#ne#j#and##not#@IN(ROADS,i,j)#and#

  20212007#not#@IN(ROADS,j,i):W(i,j)=

  BIG;W(j,i)=

  BIG;);

  !以下三个循环语句就是最短路计算公式(Floyd-Warshall算法);!k=1的初值;@FOR(NNN(i,j,k)|k#eq#1:U(i,j,k)=W(i,j));!迭代过程;@For(nodes(k)|k#lt#@size(nodes):@FOR(LINK(i,j):U(i,j,k+1)=

  @if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

  U(i,j,k),U(i,k,k)+U(k,j,k))));!最后一次迭代得到D1;@FOR(NNN(i,j,k)|k#eq#@size(nodes):D1(i,j)=

  @if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

  U(i,j,k),U(i,k,k)+U(k,j,k)));

  !以下就是按最短路D1查找相应运费C1的计算公式;@FOR(LINK|D1#eq#0:C1=0);@FOR(LINK|D1#gt##and#D1#le#300:C1=20);@FOR(LINK|D1#gt#300#and#D1#le#350:C1=23);@FOR(LINK|D1#gt#350#and#D1#le#400:C1=26);@FOR(LINK|D1#gt#400#and#D1#le#450:C1=29);@FOR(LINK|D1#gt#450#and#D1#le#500:C1=32);@FOR(LINK|D1#gt#500#and#D1#le#600:C1=37);@FOR(LINK|D1#gt#600#and#D1#le#700:C1=44);@FOR(LINK|D1#gt#700#and#D1#le#800:C1=50);@FOR(LINK|D1#gt#800#and#D1#le#900:C1=55);@FOR(LINK|D1#gt#900#and#D1#le#1000:C1=60);@FOR(LINK|D1#gt#1000:C1=60+5*@floor(D1/100-10)

  +@if(@mod(D1,100)#eq#0,0,5));ENDCALCEnd程序四十:

  model:!公路运输网的运费计算;SETS:

  !NOTES表示节点集合;

  NODES/S1,S2,S3,S4,S5,S6,S7,

  A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,

  B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/;

  !派生集合ROADS表示的是网络中的直接连接的道路(弧),由于并非所有节点间都有道路直接连接,所以将弧具体列出,这是稀疏集合;ROADS(NODES,NODES)/

  !要铺设的管道;

  A1,A2A2,A3A3,A4A4,A5A5,A6A6,A7A7,A8A8,A9A9,A10A10,A11A11,A12A12,A13A13,A14A14,A15!公路网;

  B1,A2B2,A3B5,A4B4,A5B6,A6B7,A7S1,A7B8,A8B9,A9,B10,A10,

  B11,A11B13,A12B15,A13S6,A14B16,A14B17,A15S7,A15!铁路网;

  B1,B3B2,B3B3,B5B4,B6B6,B7B7,S1B5,B8B8,S1B8,S2B8,BB9,S3B9,B10B10,B12B12,B11B11,S5B12,S4B12,B14B14,B13B14,B15B15,B16B16,S6B16,B17B17,S!距离W0(i,j)是节点i到j的直接距离(已知);

  /:W0;

  !属性W表示基本的权矩阵(直接距离),

  D2(i,j)表示节点i到j的最优行驶路线的路长,

  C2(i,j)表示节点i到j公路运输的最小单位运价(万元);LINK(NODES,NODES):W,D2,C2;!属性U表示迭代过程的权矩阵(临时标号);NNN(Nodes,nodes,nodes):U;ENDSETSDATA:!针对公路网计算时,将铁路网的距离定为充分大(BIG=20000);BIG=20000;

  W0=

  1043017560619420520168048302221425060427621132220000200002000020000200002000020000200002000020002000020000200002000020000200002000020002000020000200002000020000;!输出费用C2到文本文件中,以备后用(因为有小数,格式也变化了);@TEXT(TruckCost.txt)=@writefor(nodes(i):@writefor(nodes(j):

  c2(i,j),@newline(1)));ENDDATA

  CALC:!无向网络,根据给定的直接距离具有对称性,得到初始距离矩阵;@FOR(LINK(i,j)|@IN(ROADS,i,j):W(i,j)=

  W0(i,j);W(j,i)=

  W0(i,j););

  @FOR(LINK(i,j)|i#eq#j:W(i,j)=);

  !所有无直接连接的节点间的距离定为充分大;@FOR(LINK(i,j)|i#ne#j#and##not#@IN(ROADS,i,j)

  #and##not#@IN(ROADS,j,i):W(i,j)=

  BIG;W(j,i)=

  BIG;);

  !以下三个循环语句就是最短路计算公式(Floyd-Warshall算法);!k=1的初值;@FOR(NNN(i,j,k)|k#eq#1:U(i,j,k)=W(i,j));!迭代过程;@For(nodes(k)|k#lt#@size(nodes):@FOR(LINK(i,j):U(i,j,k+1)=

  @if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

  U(i,j,k),U(i,k,k)+U(k,j,k))));!最后一次迭代得到D1;3112@FOR(NNN(i,j,k)|k#eq#@size(nodes):D2(i,j)=

  @if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

  U(i,j,k),U(i,k,k)+U(k,j,k)));

  !以下就是按最短路D2查找相应运费C2的计算公式;@FOR(LINK:C2=.1*D2);ENDCALCEnd程序四十一:

  model:!铁路公路混合运输网的运费计算;SETS:

  !NOTES表示节点集合;

  NODES/S1,S2,S3,S4,S5,S6,S7,

  A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,

  B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/;

  !派生集合ROADS表示的是网络中的直接连接的道路(弧),由于并非所有节点间都有道路直接连接,所以将弧具体列出,这是稀疏集合;ROADS(NODES,NODES)/

  !要铺设的管道;

  A1,A2A2,A3A3,A4A4,A5A5,A6A6,A7A7,A8A8,A9A9,A10A10,A11A11,A12A12,A13A13,A14A14,A15!公路网;

  B1,A2B2,A3B5,A4B4,A5B6,A6B7,A7S1,A7B8,A8B9,A9,B10,A10,

  B11,A11B13,A12B15,A13S6,A14B16,A14B17,A15S7,A15!铁路网;

  B1,B3B2,B3B3,B5B4,B6B6,B7B7,S1B5,B8B8,S1B8,S2B8,BB9,S3B9,B10B10,B12B12,B11B11,S5B12,S4B12,B14B14,B13B14,B15B15,B16B16,S6B16,B17B17,S7/;

  !属性W表示基本的权矩阵(由C1、C2得到),

  C1(i,j)表示节点i到j铁路运输的最小单位运价(万元),

  C2(i,j)表示节点i到j公路运输的最小单位运价(万元),C(i,j)表示节点i到j混合运输的最小单位运价(万元);LINK(NODES,NODES):W,C1,C2,C;!属性U表示迭代过程的权矩阵(临时标号);NNN(Nodes,nodes,nodes):U;ENDSETSDATA:!读出前面刚刚计算得到的结果;C1=@File(TrainCost.txt);C2=@File(TruckCost.txt);!输出费用C到文本文件中,以备后用;@TEXT(FinalCost.txt)=@writefor(nodes(i)|i#le#7:

  @writefor(nodes(j)|j#ge#8#and#j#le#22:

  @format(c(i,j),"6.1f")),@newline(1));

  ENDDATA

  CALC:!得到初始距离矩阵;@FOR(LINK:W=

  @if(C1#le#C2,C1,C2));

  @FOR(LINK(i,j)|i#eq#j:W(i,j)=);

  !以下三个循环语句就是最短路计算公式(Floyd-Warshall算法);!k=1的初值;@FOR(NNN(i,j,k)|k#eq#1:U(i,j,k)=W(i,j));!迭代过程;@For(nodes(k)|k#lt#@size(nodes):@FOR(LINK(i,j):U(i,j,k+1)=

  @if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

  U(i,j,k),U(i,k,k)+U(k,j,k))));!最后一次迭代得到D1;@FOR(NNN(i,j,k)|k#eq#@size(nodes):C(i,j)=

  @if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

  U(i,j,k),U(i,k,k)+U(k,j,k)));

  ENDCALCEnd程序四十二:

  MODEL:TITLE钢管购运计划;SETS:

  SUPPLY/S1..S7/:S,P,f;

  NEED/A1..A15/:b,y,z;

  LINK(Supply,need):C,X;ENDSETSDATA:S=80080010002000200020003000;P=1601551551615515160;b=104,301,750,606,194,205,201,680,480,300,220,210,420,500,;c=@text(finalcost.txt);@TEXT(FinalResult.txt)=@writefor(supply(i):

  @writefor(need(j):@format(x(i,j),"5.0f")),@newline(1));@TEXT(FinalResult.txt)=@writefor(need:@format(y,"5.0f"));@TEXT(FinalResult.txt)=@write(@newline(1));@TEXT(FinalResult.txt)=@writefor(need:@format(z,"5.0f"));ENDDATA[obj]MIN=@sum(link(i,j):(c(i,j)+p(i))*x(i,j))

  +0.05*@sum(need(j):y(j)^2+y(j)+z(j)^2+z(j));!约束;@for(supply(i):[con1]@sum(need(j):x(i,j))<=S(i)*f(i));@for(supply(i):[con2]@sum(need(j):x(i,j))>=500*f(i));

  @for(need(j):

  [con3]@sum(supply(i):x(i,j))=y(j)+z(j));

  @for(need(j)|j#NE#15:

  [con4]z(j)+y(j+1)=b(j));

  y(1)=0;z(15)=0;@for(supply:@bin(f));@for(need:@gin(y));END程序四十三:

  model:titleCUMCM-2003B-01;sets:cai/1..10/:crate,cnum,cy,ck,flag;xie/1..5/:xsubject,xnum;link(xie,cai):distance,lsubject,number,che,b;endsetsdata:crate=30282932313332313331;xsubject=1.21.31.31.91.3;distance=5.265.194.214.002.952.742.461.900.641.21.900.991.901.131.272.251.482.043.093.515.895.615.614.563.513.652.462.461.060.50.641.761.271.832.742.604.213.725.056.14.423.863.723.162.252.810.781.621.270.50;cy=1.251.101.351.051.151.351.051.151.351.25;ck=0.951.051.001.051.101.251.051.301.351.25;

  enddata!目标函数;min=@sum(cai(i):

  @sum(xie(j):

  number(j,i)*154*distance(j,i)));!卡车每一条路线上最多可以运行的次数;@for(link(i,j):b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60*2+3+5)/5)-1)*5)/(distance(i,j)/28*60*2+3+5)));!每一条路线上的最大总车次的计算;@for(link(i,j):lsubject(i,j)=(@floor((distance(i,j)/28*60*2+3+5)/5))*b(i,j));!计算各个铲位的总产量;@for(cai(j):

  cnum(j)=@sum(xie(i):number(i,j)));!计算各个卸点的总产量;@for(xie(i):

  xnum(i)=@sum(cai(j):number(i,j)));!道路能力约束;@for(link(i,j):

  number(i,j)<=lsubject(i,j));!电铲能力约束;@for(cai(j):

  cnum(j)<=flag(j)*8*60/5);!电铲数量约束

  ----addedbyXieJinxing,2003-09-07;@sum(cai(j):flag(j))<=7;

  !卸点能力约束;@for(xie(i):

  xnum(i)<=8*20);!铲位产量约束;@for(cai(i):

  number(1,i)+number(2,i)+number(5,i)<=ck(i)*10000/154);@for(cai(i):

  number(3,i)+number(4,i)<=cy(i)*10000/154);

  !产量任务约束;@for(xie(i):

  xnum(i)>=xsubject(i)*10000/154);!铁含量约束;@sum(cai(j):

  number(1,j)*(crate(j)-30.5))<=0;@sum(cai(j):

  number(2,j)*(crate(j)-30.5))<=0;@sum(cai(j):

  number(5,j)*(crate(j)-30.5))<=0;@sum(cai(j):

  number(1,j)*(crate(j)-28.5))>=0;@sum(cai(j):

  number(2,j)*(crate(j)-28.5))>=0;@sum(cai(j):

  number(5,j)*(crate(j)-28.5))>=0;

  !关于车辆的具体分配;@for(link(i,j):

  che(i,j)=number(i,j)/b(i,j));!各个路线所需卡车数简单加和;hehe=@sum(link(i,j):che(i,j));!整数约束;@for(link(i,j):@gin(number(i,j)));@for(cai(j):@bin(flag(j)));!车辆能力约束;hehe<=20;ccnum=@sum(cai(j):cnum(j));end程序四十四“:

  model:titleCUMCM-2000D-a;sets:pp/p1..p7/;!也表示R1~R7;qq/q1..q7/;!也表示S1~S7;point/1..4/;

  wave(pp,qq):a;cross(pp,qq,pp,qq)|&3#LT#@size(pp)#and#&4#LT#@size(qq):dy,b,c;CXP(cross,point):y;endsetsData:!BIG是正常情况下不可能出现的交点坐标,这里只作为标记;BIG=300;@ole("F:\lindo\lindo书\ch12\exam1204.xls","bb","cc")=bc;Enddatacalc:!计算波线PiQj的长度;@for(wave(i,j):

  a(i,j)=@sqrt(@sqr(240)+@sqr(40*j-40*i)));!当i=j时,计算波线PiQj与小方块单元(k,l)的交线在y坐标上的投影长度;@for(cross(i,j,k,l)|i#EQ#j#AND#i#EQ#1:

  dy(i,j,k,l)=@if(k#EQ#i,40,BIG););@for(cross(i,j,k,l)|i#EQ#j#AND#i#EQ#@size(pp):

  dy(i,j,k,l)=@if(k#EQ#i-1,40,BIG););@for(cross(i,j,k,l)|i#EQ#j#AND#i#NE#1#AND#i#NE#@size(pp):

  dy(i,j,k,l)=@if(k#EQ#i-1#OR#k#EQ#i,20,BIG););!当i,j不相等时,计算波线PiQj与小方块单元(k,l)的交点的y坐标;@for(cross(i,j,k,l)|i#NE#j:

  @for(point(n)|n#EQ#1:

  y(i,j,k,l,n)=@if(l-1#LE#6*(k-i)/(j-i)#AND#l#GE#6*(k-i)/(j-i),

  240*(k-i)/(j-i),BIG););

  @for(point(n)|n#EQ#2:

  y(i,j,k,l,n)=@if(l-1#LE#6*(k+1-i)/(j-i)#AND#l#GE#6*(k+1-i)/(j-i),

  240*(k+1-i)/(j-i),BIG););

  @for(point(n)|n#EQ#3:

  y(i,j,k,l,n)=@if(0#LE#6*(i-k)-(i-j)*(l-1)#AND#6#GE#6*(i-k)-(i-j)*(l-1),

  40*(l-1),BIG););

  @for(point(n)|n#EQ#4:

  y(i,j,k,l,n)=@if(0#LE#6*(i-k)-(i-j)*l#AND#6#GE#6*(i-k)-(i-j)*l,

  40*l,BIG);););!当i,j不相等时,计算波线PiQj与小方块单元(k,l)的交线在y坐标上的投影长度;@for(cross(i,j,k,l)|i#NE#j:

  dy(i,j,k,l)=@max(point(n):@if(y(i,j,k,l,n)#LT#BIG,y(i,j,k,l,n),0))

  -@min(point(n):y(i,j,k,l,n)));!计算波线PiQj与小方块单元(k,l)的交线长度;@for(cross(i,j,k,l):

  b(i,j,k,l)=@if(@abs(dy(i,j,k,l))#LT#BIG,

  a(i,j)*dy(i,j,k,l)/240,0));@for(cross(i,j,k,l):

  c(i,j,k,l)=b(j,i,l,7-k));endcalc@for(cross:@free(dy));End程序四十六:

  model:titleCUMCM-2000D-b;sets:pp/p1..p7/;!也表示R1~R7;qq/q1..q7/;!也表示S1~S7;wave(pp,qq):a,t1,t2;cell(pp,qq)|&1#LT#@size(pp)#and#&2#LT#@size(qq):x;cross(wave,cell):b,c;endsetsData:t1=0.06110.09890.30520.32210.34900.38070.4311;t2=0.06450.07530.34560.36550.31650.27490.44340.06020.07000.32050.32890.24090.38910.49190.08130.28520.09740.42470.32140.58950.39040.35160.43410.40930.10070.32560.30160.07860.38670.34910.42400.32490.09040.20580.07090.43140.48000.45400.21340.18740.08410.09140.57210.49800.31120.10170.21300.07060.05830.08950.05920.41310.44530.45290.31770.33970.19960.44130.05980.40400.22630.23640.35660.20320.43180.41530.07380.19170.30640.19540.41810.47700.41560.17890.08390.22170.07600.49230.52420.35630.07400.17680.09390.06880.56460.38050.19190.21220.18100.10310.1042;v1=2880;v2=320;bc=@ole("exam1204.xls","bb","cc");

  Enddata!计算波线PiQj的长度,也等于波线RiSj的长度;@for(wave(i,j):

  a(i,j)=(240^2+(40*j-40*i)^2)^0.5);!计算误差的平方和;min=@sum(wave(i,j):

  (t1(i,j)-(a(i,j)-@sum(cell(k,l):b(i,j,k,l)*x(k,l)))/v1-@sum(cell(k,l):b(i,j,k,l)*x(k,l))/v2)^2+(t2(i,j)-(a(i,j)-@sum(cell(k,l):c(i,j,k,l)*x(k,l)))/v1-@sum(cell(k,l):c(i,j,k,l)*x(k,l))/v2)^2);!@for(cell(i,j)|i#EQ#1:x(i,j)=0);@for(cell:@bin(x));End程序四十七:

  model:

  !7个工人,7个工作的分配问题;sets:

  workers/w1..w7/;

  jobs/j1..j7/;

  links(workers,jobs):cost,volume;endsets

  !目标函数;

  min=@sum(links:cost*volume);

  !每个工人只能有一份工作;

  @for(workers(I):

  @sum(jobs(J):volume(I,J))=1;);

  !每份工作只能有一个工人;

  @for(jobs(J):

  @sum(workers(I):volume(I,J))=1;);data:

  cost=611412410;enddataend程序四十八:

  model:

  titleCUMCM-2003B-01;sets:cai/1..10/:crate,cnum,cy,ck,flag;xie/1..5/:xsubject,xnum;link(xie,cai):distance,lsubject,number,che,b;endsetsdata:crate=30282932313332313331;xsubject=1.21.31.31.91.3;distance=5.265.194.214.002.952.742.461.900.641.21.900.991.901.131.272.251.482.043.093.515.895.615.614.563.513.652.462.461.060.50.641.761.271.832.742.604.213.725.056.14.423.863.723.162.252.810.781.621.270.50;cy=1.251.101.351.051.151.351.051.151.351.25;ck=0.951.051.001.051.101.251.051.301.351.25;

  enddata!目标函数;min=@sum(cai(i):

  @sum(xie(j):

  number(j,i)*154*distance(j,i)));

  !max=@sum(link(i,j):number(i,j));!max=xnum(3)+xnum(4)+xnum(1)+xnum(2)+xnum(5);!min=@sum(cai(i):!

  @sum(xie(j):!

  number(j,i)*154*distance(j,i)));!xnum(1)+xnum(2)+xnum(5)=340;!xnum(1)+xnum(2)+xnum(5)=341;!xnum(3)=160;!xnum(4)=160;!卡车每一条路线上最多可以运行的次数;@for(link(i,j):b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60*2+3+5)/5)-1)*5)/(distance(i,j)/28*60*2+3+5)));!b(i,j)=@floor(8*60/(distance(i,j)/28*60*2+3+5)));

  !t(i,j)=@floor((distance(i,j)/28*60*2+3+5)/5);!b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60*2+3+5)/5))*5)/(distance(i,j)/28*60*2+3+5)));!每一条路线上的最大总车次的计算;@for(link(i,j):lsubject(i,j)=(@floor((distance(i,j)/28*60*2+3+5)/5))*b(i,j));!计算各个铲位的总产量;@for(cai(j):

  cnum(j)=@sum(xie(i):number(i,j)));

  !计算各个卸点的总产量;@for(xie(i):

  xnum(i)=@sum(cai(j):number(i,j)));!道路能力约束;@for(link(i,j):

  number(i,j)<=lsubject(i,j));!电铲能力约束;@for(cai(j):

  cnum(j)<=flag(j)*8*60/5);!电铲数量约束

  ----addedbyXieJinxing,2003-09-07;@sum(cai(j):flag(j))<=7;

  !卸点能力约束;@for(xie(i):

  xnum(i)<=8*20);!铲位产量约束;@for(cai(i):

  number(1,i)+number(2,i)+number(5,i)<=ck(i)*10000/154);@for(cai(i):

  number(3,i)+number(4,i)<=cy(i)*10000/154);

  !产量任务约束;@for(xie(i):

  xnum(i)>=xsubject(i)*10000/154);!铁含量约束;@sum(cai(j):

  number(1,j)*(crate(j)-30.5))<=0;@sum(cai(j):

  number(2,j)*(crate(j)-30.5))<=0;@sum(cai(j):

  number(5,j)*(crate(j)-30.5))<=0;@sum(cai(j):

  number(1,j)*(crate(j)-28.5))>=0;@sum(cai(j):

  number(2,j)*(crate(j)-28.5))>=0;@sum(cai(j):

  number(5,j)*(crate(j)-28.5))>=0;

  !关于车辆的具体分配;@for(link(i,j):

  che(i,j)=number(i,j)/b(i,j));!各个路线所需卡车数简单加和;hehe=@sum(link(i,j):che(i,j));!整数约束;@for(link(i,j):@gin(number(i,j)));@for(cai(j):@bin(flag(j)));!车辆能力约束;hehe<=20;ccnum=@sum(cai(j):cnum(j));

  end程序四十八:

  !最短路问题;model:data:

  n=10;enddatasets:

  cities/1..n/:F;

  !10个城市;

  roads(cities,cities)/

  1,21,32,42,52,63,43,53,64,4,5,5,5,6,6,7,18,19,1/:D,P;endsetsdata:

  D=

  119;enddata

  F(n)=0;

  @for(cities(i)|i#lt#n:

  F(i)=@min(roads(i,j):D(i,j)+F(j)););

  !显然,如果P(i,j)=1,则点i到点n的最短路径的第一步是i-->j,否则就不是。

  由此,我们就可方便的确定出最短路径;

  @for(roads(i,j):

  P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0));End程序四十九:

  !旅行售货员问题;model:sets:

  city/1..5/:u;

  link(city,city):

  dist,

  !距离矩阵;

  x;endsets

  n=@size(city);data:

  !距离矩阵,它并不需要是对称的;

  dist=@qrand(1);

  !随机产生,这里可改为你要解决的问题的数据;enddata

  !目标函数;

  min=@sum(link:dist*x);

  @FOR(city(K):

  !进入城市K;

  @sum(city(I)|I#ne#K:x(I,K))=1;

  !离开城市K;

  @sum(city(J)|J#ne#K:x(K,J))=1;);

  !保证不出现子圈;

  @for(city(I)|I#gt#1:

  @for(city(J)|J#gt#1#and#I#ne#J:

  u(I)-u(J)+n*x(I,J)<=n-1););

  !限制u的范围以加速模型的求解,保证所加限制并不排除掉TSP问题的最优解;

  @for(city(I)|I#gt#1:u(I)<=n-2);

  !定义X为0\1变量;

  @for(link:@bin(x));End

篇七:计算机生产销售计划lingo篇八:计算机生产销售计划lingo

  

  第4讲

  Lingo软件入门

  4.1初识Lingo程序

  Lingo程序书写实际上特别简捷,数学模型怎样描述,Lingo语言就对应地怎样表达。首先介绍两个简单的Lingo程序。

  例4.1求解如下的线性规划问题:

  maxz?72x1?64x2?x1?x2?50,?12x?8x?480,

  ?2s.t.?1?3x1?100,??x1,x2?0Lingo求解程序如下

  max=72*x1+64*x2;x1+x2<=50;12*x1+8*x2<=480;3*x1<=100;说明:Lingo中默认所有的变量都是非负的,在Lingo中就不需写出对应的约束。

  例4.2抛物面z?x?y被平面x?y?z?1截成一椭圆,求原点到这椭圆的最短距离。

  该问题可以用拉格朗日乘子法求解。下面我们把问题归结为数学规划模型,用Lingo软件求解。

  设原点到椭圆上点(x,y,z)的距离最短,建立如下的数学规划模型:

  22minx2?y2?z2?x?y?z?1,

  s.t.?22?z?x?y.

  Lingo求解程序如下:

  min=(x^2+y^2+z^2)^(1/2);x+y+z=1;z=x^2+y^2;@free(x);@free(y);

  说明:Lingo中默认所有变量都是非负的,这里x,y的取值是可正可负的,所以使用Lingo函数free。

  例4.3求解如下的数学规划模型:

  min?xi?11002i?100??xi?1,

  ?i?1s.t.?99?x?x2.?100i?i?1?

  用Lingo求解上述数学规划问题,使用集合和函数比较方便,使用集合的目的是为了定义向量,集合使用前,必须先定义;Lingo程序中的标量不需要定义,直接使用即可。

  sets:var/1..100/:x;endsets

  min=@sqrt(@sum(var(i):x(i)^2));@sum(var(i):x(i))=1;x(100)=@sum(var(i)|i#le#99:x(i)^2);@for(var(i)|i#le#99:@free(x(i)));说明:如果不使用集合和函数,全部使用标量x1,x2,…,x100,最后一个约束就要写99遍,@free(x1);…;@free(x99)。

  4.2Lingo软件的界面介绍

  4.2.1Lingo的模型窗口

  求解按钮

  图4-1Lingo的模型窗口

  模型窗口输入格式要求:

  (1)Lingo的数学规划模型包含目标函数、决策变量、约束条件三个要素。

  (2)在Lingo程序中,每一个语句都必须要用一个英文状态下的分号结束,一个语句可以分几行输入。

  (3)Lingo的注释以英文状态的!开始,必须以英文状态下的分号结束;

  (4)Lingo的变量不区分字母的大小写,必须以字母开头,可以包含数字和下划线,不超过32个字符,。

  (5)Lingo程序中,只要定义好集合后,其他语句的顺序是任意的。

  (6)Lingo中的函数以“@”开头。

  (7)Lingo程序默认所有的变量都是非负的。

  (8)Lingo程序中“>或<”号与“?或?”号功能相同。

  2.Lingo建模时需要注意的几个基本问题

  (1)尽量使用实数变量,减少整数约束和整数变量。

  (2)模型中使用的参数数量级要适当,否则会给出警告信息,可以选择适当的单位改变相对尺度。

  (3)尽量使用线性模型,减少非线性约束和非线性变量的个数,同时尽量少使用绝对值、符号函数、多变量求最大最小值、取整函数等非线性函数。

  (4)合理设定变量上下界,尽可能给出初始值。

  4.2.2Lingo的求解器运行状态窗口

  求解器状态

  变量数量

  变量总数

  非线性变量数

  整数变量数

  约束总数

  非线性约束个数

  总数

  非线性系数个数

  内存的使用量

  求解花费的时间

  当前模型类型

  当前解的状态

  当前目标函数值

  当前约束不满足的总量

  目前为止迭代次数

  使用的特殊求解程序

  目前可行解的最佳目标函数值

  目标函数值的界

  特殊求解程序当前运行步数

  有效步数

  约束数量

  非零系数数量

  扩展求解器状态

  图4-2Lingo的求解器状态窗口

  1.求解器状态框

  “当前解的状态”有如下几种:

  GlobalOptimum

  全局最优解

  LocalOptimum

  局部最优解

  Feasible

  可行解

  Infeasible

  不可行解

  Unbounded无界解

  Interrupted

  中断

  Undetermined

  未确定

  2.扩展求解器状态

  “使用的特殊求解程序”有如下几种:

  B-and-B分支定界算法

  Global

  全局最优求解程序

  Multistart用多个初始点求解的程序

  3.Lingo求解的参数设置

  Lingo10软件管理的内存最大为2G,如果你的计算机内存是4G的话,Lingo的内存就设置为2G,你的计算机内存是8G的话,也要设置成2G。

  Lingo内存的设置是依次选择菜单Lingo(第3个主菜单)→Options…→ModelGenerator。如图4-3所示红色标注的部分。

  图4-3求解器Options的一些设置

  如果模型是非线性模型,且欲求全局最优解,要把求解器设置成“Global”。进入图4-3中蓝色“GlobalSolver”后,在“UseGlobalSolver”前面打上“√”,设置完成后,要关闭Lingo软件,再重新启动Lingo软件。

  4.2.3一般线性规划问题的影子价格与灵敏度分析

  如果没有学过运筹学,本部分就不要看了。

  以例4-1的线性规划模型为例。

  maxz?72x1?64x2?x1?x2?50,?12x?8x?480,

  ?2s.t.?1?3x1?100,??x1,x2?1.影子价格

  要进行灵敏度分析,必须选择如图4-4所示的画圈的选项,依次选择下列菜单Lingo→Options……GeneralSolver下DualComputations选择Prices。

  图4-4LingoOptions设置

  勾选了Prices选项后,运行lingo程序,输出结果窗口中包含灵敏度分析,如图4-5所示。

  最优目标函数值

  第一个约束条件

  第三个约束条件

  图4-5灵敏度分析

  目标函数

  从结果可知,目标函数的最优值为3360,决策变量x1?20,x2?30。

  (1)reducedcost值对应于单纯形法计算过程中各变量的检验数。

  (2)图3中红色方框表示第二个约束条件,SlackorSurplus值为0表示该约束松弛变量为0,约束等号成立,为紧约束或有效约束。蓝色方框表示第三个约束松弛变量为40,不等号成立,有剩余。

  (3)DualPrice对应影子价格,红色方框表示当第一个约束条件右端常数项增加1个单位,即由50变为51时,目标函数值增加48,即约束条件1所代表的资源的影子价格。蓝色方框表示,第三个约束条件右端常数项增加1个单位时,目标函数值不变。

  2.确保最优基不变的系数变化范围

  如果想要研究目标函数的系数和约束右端常数项系数在什么范围变化(假定其他系数保持不变)时,最优基保持不变。此时需要首先勾选图4-6所示的选项。

  图4-6LingoOptions对话框

  此时不需要重新运行程序,关闭输出窗口,从菜单命令Lingo中选中“Range”,即可得到如下输出窗口,如图4-7。

  图4-7灵敏度分析范围变化输出窗口

  (1)ObjectiveCoefficientRanges一栏反映了目标函数中决策变量的价值系数,可以看到x1的系数是72,x2的系数是64,说明x1要想确保当前最优基不变,在其他系数不变的情况下,x1系数的变化范围为(64,96),当x1的系数在这个范围内变化时,最优解不变,但是最优目标函数值发生变化,同样,x2系数的变化范围为(48,72)。(2)RighthandSideRanges一栏反映了约束条件右端代表资源系数的常数项,可见第一个约束右端常数项在?43.333333,60?变化时,最优基不变,但是最优解发生变化,目标函数值也相应地发生变化。由于第三个约束松弛变量为40,有剩余,可见无论再如何增加该资源,只会使剩得更多,对解没有影响,但是如果减少量超过40,就会产生影响。

  4.3Lingo软件的基本语法

  4.3.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例4.3sets:

  product/AB/;

  machine/MN/;

  week/1..2/;

  allowed(product,machine,week):x;endsets

  4.3.2数据

  数据部分的语法为

  data:属性1=数据列表;

  属性2=数据列表;

  enddata在数据段中,=右侧不能出现运算,故不能出现分数,如3/8,这里的/表示除法运算。

  4.3.3计算段

  计算段部分不能含有变量,必须是已知数据的运算。

  calc:b=0;a=a+1;endcalc4.3.4目标函数、约束条件和子模型

  目标函数和约束条件这里就不具体给出了,下面通过具体例子给出。

  在

  LINGO9.0及更早的版本中,在每个LINGO模型窗口中只允许有一个优化模型,可以称为主模型(MAINMODEL)。在LINGO10.0中,每个LINGO模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO的编程能力。

  子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是:

  SUBMODELmymodel:可执行语句(约束+目标函数);ENDSUBMODEL其中

  mymodel是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。

  如果已经定义了子模型

  mymodel,则在计算段中可以用语句“@SOLVE(mymodel);”求解这个子模型。

  4.4Lingo函数

  4.4.1算术运算符

  ^

  乘方

  ﹡

  乘

  /

  除

  ﹢

  加

  ﹣

  减

  4.4.2逻辑运算符

  在Lingo中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。

  Lingo具有9种逻辑运算符

  #not#

  否定该操作数的逻辑值,#not#是一个一元运算符。

  #eq#

  若两个运算数相等,则为true;否则为false。

  #ne#

  若两个运算符不相等,则为true;否则为false。

  #gt#

  若左边的运算符严格大于右边的运算符,则为true;否则为false。

  #ge#

  若左边的运算符大于或等于右边的运算符,则为true;否则为false。

  #lt#

  若左边的运算符严格小于右边的运算符,则为true;否则为false。

  #le#

  若左边的运算符小于或等于右边的运算符,则为true;否则为false。

  #and#

  仅当两个参数都为true时,结果为true;否则为false。

  #or#

  仅当两个参数都为false时,结果为false;否则为true。

  4.4.3关系运算符

  在Lingo中,关系运算符主要是被用在模型中来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,逻辑运算符仅仅判断一个关系是否被满足,满足为真,不满足为假。

  Lingo有三种关系运算符:“=”、“<=”和“>=”。Lingo中还能用“<”表示小于等于关系,“>”表示大于等于关系。Lingo并不支持严格小于和严格大于关系运算符。

  4.4.4数学函数

  Lingo提供了大量的标准数学函数

  @abs(x)返回x的绝对值。

  @sin(x)返回x的正弦值,x采用弧度制。

  @cos(x)返回x的余弦值。

  @tan(x)返回x的正切值。

  @exp(x)返回常数e的x次方。

  @log(x)返回x的自然对数。

  @lgm(x)返回x的gamma函数的自然对数。

  @mod(x,y)返回x除以y的余数。

  @sign(x)如果x<0返回-1;否则,返回1。

  @floor(x)返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。

  @smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值。

  @smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值。

  4.4.5变量界定函数

  变量界定函数实现对变量取值范围的附加限制,共4种

  @bin(x)限制x为0或1;

  @bnd(L,x,U)限制L≤x≤U;

  @free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数;

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

  在默认情况下,Lingo规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。

  4.4.6集循环函数

  @for:该函数用来产生对集成员的约束。

  @sum:该函数返回遍历指定的集成员的一个表达式的和。

  @min和@max:返回指定的集成员的一个表达式的最小值或最大值。

  4.4.其他函数

  (1)函数@TABLE该函数以表格形式输出与集合和集合的属性相关的数据,并且只能在数据段(DATA)中使用。目前该函数仅用于将数据输出到结果报告窗口或文本文件中,而不能输出到数据库或电子表格(EXCEL)文件中。也就是说,只能输出到@TEXT函数,而不能输出到@OLE和@ODBC函数。

  (2)函数@WRITE和@WRITEFOR在LINGO10.0中,函数@WRITE和@WRITEFOR这两个函数是为了方便用户控制输出格式,但它们还可以出现在计算段(CALC)随时输出中间结果,并且不需要使用@TEXT函数,输出的结果也是被定向到缺省的输出设备(通常就是标准的报告窗口)。如果希望改变缺省的输出设备,可以采用@DIVERT函数。

  注:Lingo中矩阵数据是逐行存储的,Matlab中数据是逐列存储的。

  4.5Lingo的数据传递

  下面我们以Lingo帮助中运输问题的3个例程来说明Lingo软件的数据传递。

  例4.4使用LINGO软件计算6个产地8个销地的最小费用运输问题。单位商品运价如表4-1所示。

  表4-1单位商品运价表

  单位运价

  销地

  产地

  A1A2A3A4A5A6销量

  B164572535B229263537B365179222B473935232B548797841B625422132B58376443B92315338产量

  6055514341521.数学模型

  设xij(i?1,2,?6;j?1,2,?,8)表示产地Ai运到销地Bj的量,cij表示产地Ai到销地Bj的单位运价,dj表示销地Bj的需求量,ei表示产地Ai的产量,建立如下线性规划模型

  68min??ci?1j?1ijxij,?6??xij?dj,j?1,2,?,8,?i?1?8s.t.??xij?ei,i?1,2,?,6,

  ?j?1?x?0,i?1,2,?,6;j?1,2,?,8.?ij?2.Lingo程序

  (1)程序和数据放在同一个文件

  model:!6产地8销地运输问题;sets:

  warehouses/1..6/:e;

  vendors/1..8/:d;

  links(warehouses,vendors):c,x;endsets!目标函数;

  min=@sum(links:c*x);!需求约束;

  @for(vendors(J):@sum(warehouses(I):x(I,J))=d(J));!产量约束;

  @for(warehouses(I):@sum(vendors(J):x(I,J))<=e(I));!下面是数据;data:

  e=605551434152;

  d=3537223241324338;

  c=626742954953858252197433767392712395726555228143;enddataend

  (2)通过纯文本文件传递数据

  使用Lingo函数@file从外部纯文本文件读入数据,执行一次@file,输入1个记录,记录之间的分隔符为~。

  使用Lingo函数@text把计算结果输出到外部纯文本文件中。

  计算的Lingo程序如下:

  model:sets:

  warehouses/1..6/:e;

  vendors/1..8/:d;

  links(warehouses,vendors):c,x;endsets

  min=@sum(links:c*x);

  @for(vendors(J):@sum(warehouses(I):x(I,J))=d(J));

  @for(warehouses(I):@sum(vendors(J):x(I,J))<=e(I));data:

  e=@file(sdata.txt);

  d=@file(sdata.txt);

  c=@file(sdata.txt);

  @text(sdata2.txt)=@table(x);!把计算结果以表格形式输出到外部纯文本文件;

  enddata

  end

  其中纯文本数据文件sdata.txt中的数据格式如下

  65551434152~

  !~是记录分割符,该第一个记录是产量;353223241324338~

  !该第二个记录是需求量;6542531255!最后一个记录是单位运价;

  (3)通过Excel文件传递数据

  Lingo通过@OLE函数实现与Excel文件传递数据,使用@OLE函数既可以从Excel文件中导入数据,也能把计算结果写入Excel文件。

  从Excel文件中导入数据的调用格式如下:

  属性名1=@OLE(‘Excel文件名’,‘数据块名称1’);

  使用@OLE函数也能把计算结果写入Excel文件,使用格式如下

  @OLE(‘Excel文件名’,‘数据块名称2’)=属性名2;

  如数据块名称与属性名相同时,可以省略数据块名称。

  计算的Lingo程序如下:

  model:sets:

  warehouses/1..6/:e;

  vendors/1..8/:d;

  links(warehouses,vendors):c,x;endsets

  min=@sum(links:c*x);

  @for(vendors(J):@sum(warehouses(I):x(I,J))=d(J));

  @for(warehouses(I):@sum(vendors(J):x(I,J))<=e(I));data:

  e=@ole(sdata3.xls);

  d=@ole(sdata3.xls);

  c=@ole(sdata3.xls,cc);!Excel中不允许使用域名“c”,对应的数据块定义成“cc”;

  @ole(sdata.xls)=x;enddataend

  4.6Lingo各种应用问题举例

  4.6.1线性规划

  例4.5某部门在今后五年内考虑给下列项目投资,已知:

  项目A,从第一年到第四年每年年初需要投资,并于次年末回收本利115%;

  项目B,从第三年初需要投资,到第五年末能回收本利125%,但规定最大投资额不超过4万元;

  项目C,第二年初需要投资,到第五年末能回收本利140%,但规定最大投资额不超过

  3万元;

  项目D,五年内每年初可购买公债,于当年末归还,并加利息6%。

  该部门现有资金10万元,问它应如何确定给这些项目每年的投资额,使到第五年末拥有的资金的本利总额为最大?

  解

  用j?1,2,3,4分别表示项目A,B,C,D,用xij(i?1,2,3,4,5)分别表示第i年年初给项目A,B,C,D的投资额。根据给定的条件,对于项目A存在变量:x11,x21,x31,x41;对于项目B存在变量:x32;对于项目C存在的变量:x23;对于项目D存在变量:x14,x24,x34,x44,x54。

  该部门每年应把资金全部投出去,手中不应当有剩余的呆滞资金。

  第一年:x11?x14?100000.第二年初部门拥有的资金是项目D在第一年末回收的本利,于是第二年的投资分配为

  x21?x23?x24?1.06x14.第三年初部门拥有的资金是项目A第一年投资及项目D第二年投资中回收的本利总和。于是第三年的资金分配为

  x31?x32?x34?1.15x11?1.06x24.类似地可得

  第四年:x41?x44?1.15x21?1.06x34.第五年:x54?1.15x31?1.06x44.此外,项目B,C的投资额限制,即

  x32?40000,x23?30000.问题是要求在第五年末该部门手中拥有的资金额达到最大,目标函数可表示为

  maxz?1.15x41?1.40x23?1.25x32?1.06x54.综上所述,建立如下的线性规划模型:

  maxz?1.15x41?1.40x23?1.25x32?1.06x54,s.t.x11?x14?100000,x21?x23?x24?1.06x14,x31?x32?x34?1.15x11?1.06x24,x41?x44?1.15x21?1.06x34,x54?1.15x31?1.06x44,x32?40000,x23?30000,xij?0,i?1,2,3,4,5;j?1,2,3,4.计算的Lingo程序如下。

  model:sets:row/1..5/;col/1..4/;link(row,col):x;endsets

  max=1.15*x(4,1)+1.4*x(2,3)+1.25*x(3,2)+1.06*x(5,4);x(1,1)+x(1,4)=100000;x(2,1)+x(2,3)+x(2,4)=1.06*x(1,4);x(3,1)+x(3,2)+x(3,4)=1.15*x(1,1)+1.06*x(2,4);x(4,1)+x(4,4)=1.15*x(2,1)+1.06*x(3,4);

  11x(5,4)=1.15*x(3,1)+1.06*x(4,4);x(3,2)<40000;x(2,3)<30000;end

  例4.6捷运公司在下一年度的1~4月的4个月内拟租用仓库堆放物资。已知各月份所需仓库面积列于表4-2。仓库租借费用随合同期而定,期限越长,折扣越大,具体数字见表4-2。租借仓库的合同每月初都可办理,每份合同具体规定租用面积和期限。因此该公司可根据需要,在任何一个月初办理租借合同。每次办理时可签一份合同,也可签若干份租用面积和租借期限不同的合同,试确定该公司签订租借合同的最优决策,目的是使所付租借费用最小。

  表4-2100m21234月份

  15102012所需仓库面积

  合同租借期限

  1个月

  2个月

  3个月

  4个月

  2800450060007300合同期内的租费

  解:设变量xij表示捷运公司在第i(i?1,?,4)个月初签订的租借期为j(j?1,?,4)个月的仓库面积的合同(单位为100m2)。因5月份起该公司不需要租借仓库,故x24,x33,x34,x42,x43,x44均为零。该公司希望总的租借费用为最小,故有如下数学模型:

  (目标函数)minz?2800(x11?x21?x31?x41)?4500(x12?x22?x32)

  ?6000(x13?x23)?7300x14?x11?x12?x13?x14?15,??x12?x13?x14?x21?x22?x23?10,?s.t.(约束条件)?x13?x14?x22?x23?x31?x32?20,

  ?x?x?x?x?12,233241?14??xij?0,i?1,?,4;j?1,?,4.这个模型中的约束条件分别表示当月初签订的租借合同的面积加上该月前签订的未到期的合同的租借面积总和,应不少于该月所需的仓库面积。

  求得的最优解为x11?3,x31?8,x14?12,其它变量取值均为零,最优值z*?118400。

  计算的Lingo程序如下:

  model:sets:num/1..4/:d,t,c;link(num,num):x;endsets

  data:d=15102012;t=1234;c=2800450060007300;enddata

  min=@sum(link(i,j)|i#le#5-j:c(j)*x(i,j));@for(num(k):@sum(link(i,j)|i#le#k#and#j#ge#k+1-i:x(i,j))>d(k));@for(num(i):@for(num(j)|j#ge#6-i:x(i,j)=0));end

  124.6.2整数规划

  例4.求解指派矩阵C的指派问题。

  ?127979??810666???C??71712149?

  ??15146610????410779??这里C?(cij)5?5中的cij表示第i个人干第j项工作花费的时间(单位:小时)。

  解

  首先建立指派问题的0-1整数规划模型,引进0-1变量

  ?1,第i个人干第j项工作,xij???0,第i个人不干第j项工作.min建立的0-1整数规划模型如下

  ??ci?1j?155ijxij,?5??xij?1,i?1,2,?,5,?j?1??5s.t.??xij?1,j?1,2,?,5,

  ?i?1?xij?0或1,i,j?1,2,?,5.???利用Lingo程序求得指派问题的解为

  ?12345??24531?,??即第1个人干第2项工作,第2个人干第4项工作,第3个人干第5项工作,第4个人干第3项工作,第5个人干第1项工作。

  计算的Lingo程序如下:

  model:sets:var/1..5/;link(var,var):c,x;endsets

  data:c=1279798106667171214915146610410779;enddata

  min=@sum(link:c*x);@for(var(i):@sum(var(j):x(i,j))=1);@for(var(j):@sum(var(i):x(i,j))=1);@for(link:@bin(x));

  end

  例4.已知10个商业网点的坐标如表4-3所示,现要在10个网点中选择适当位置设置供应站,要求供应站只能覆盖10公里之内的网点,且每个供应站最多供应5个网点,如

  13何设置才能使供应站的数目最小,并求最小供应站的个数。

  表4-3商业网点的x坐标和y坐标数据

  x

  y

  9.4888.79211.59611.56435.67569.8499.175613.138515.466315.54645.68110.3863.92944.43259.96517.66326.15111.8568.872115.586解

  记dij(i?1,?,10,)表示第i个营业网点与第j个营业网点之间的距离,引进0-1变量

  ?1,第i个网点建立供应站,

  xi???0,第i个网点不建立供应站.?1,第j个网点被第i个网点的供应站覆盖,yij???0,否则.建立如下的0-1整数规划模型

  min?xi?1ni

  ?n??yij?1,j?1,2,?,n,?i?1?dijyij?10xi,i,j?1,2,?,n,??s.t.?xi?yij,i,j?1,2,?,n,

  ?10??y?5,i?1,2,?,10,?j?1ij???xi,yij?0或1,i,j?1,2,?,n.计算的Lingo程序如下

  model:sets:num/1..10/:x0,y0,x;link(num,num):y,d;endsets

  data:x0=9.48888.792811.596011.56435.67569.84979.175613.138515.466315.5464;y0=5.681710.38683.92944.43259.965817.66326.151711.85698.872115.5868;enddata

  calc:@for(link(i,j):d(i,j)=@sqrt((x0(i)-x0(j))^2+(y0(i)-y0(j))^2));endcalc

  min=@sum(num:x);@for(num(j):@sum(num(i):y(i,j))>1);@for(link(i,j):d(i,j)*y(i,j)<10*x(i));@for(link(i,j):x(i)>y(i,j));@for(num(i):@sum(num(j):y(i,j))<5);@for(num:@bin(x));

  14@for(link:@bin(y));

  4.6.3非线性规划

  建模时尽量建立线性规划模型,或者把非线性规划模型线性化。

  例4.某战略轰炸机队指挥官得到了摧毁敌方坦克生产能力的命令。根据情报,敌方有四个生产坦克部件的工厂,位于不同地方。只要破坏其中任一工厂的生产设施就可以有效地停止敌方坦克的生产。根据分析,执行该任务的最大因素是汽油短缺,为此项任务只能提供48000加仑汽油。而对于任何一种轰炸机来说,不论去轰炸哪一个工厂都必须有足够往返的燃料和100加仑备用燃料。

  该轰炸机队现有重型和中型两种轰炸机,其燃油消耗量及数量见表4-4。根据情报分析,各工厂距离空军基地的距离和摧毁目标的概率见表4-5。

  编号

  12工厂

  1234表4-5各工厂距离空军基地的距离和摧毁目标的概率

  摧毁目标的概率

  距离/km重型

  4500.104800.205400.156000.25表4-4燃油消耗量及数量

  飞机类型

  每千米耗油量

  重型

  1/2中型

  1/3飞机架数

  4832中型

  0.080.160.120.2试问,指挥官应向四个工厂派遣每种类型的飞机各多少架去执行任务才能使成功的概率最大?

  解

  设xij为派遣第i型飞机去第j个工厂执行任务的飞机数量,i?1,2,j?1,2,3,4。

  (1)目标函数

  我们的目标是使至少摧毁一个工厂的概率最大。这相当于不摧毁任何工厂的概率最小,假设用Q代表这个概率,则

  Q?(1?0.10)x11(1?0.20)x12(1?0.15)x13(1?0.25)x14?(1?0.08)x21(1?0.16)x22(1?0.12)x23(1?0.20)x24,所以目标函数为minQ。

  (2)约束条件

  记重型和中型飞机每千米的耗油量分别为a1,a2,重型和中型飞机的数量分别为b1,b2,空军基地到第j个工厂的距离为dj(j?1,2,3,4),则燃料限制为

  24242?ai?djxij?100??xij?48000,i?1j?1i?1j?1飞机数量限制为

  ?xj?14ij?bi,i?1,2.综上所述,建立如下的非线性规划模型

  minQ?(1?0.10)x11(1?0.20)x12(1?0.15)x13(1?0.25)x14?(1?0.08)x21(1?0.16)x22(1?0.12)x23(1?0.20)x24,15424?2?2?ai?djxij?100??xij?48000,i?1j?1?i?1j?1??4s.t.??xij?bi,i?1,2,

  ?j?1?x?0,且x为整数.ij?ij??为了求解方便,可以把上述模型进行线性化,化成如下的线性规划模型

  ~minQ?x11ln(1?0.10)?x12ln(1?0.20)?x13ln(1?0.15)?x14ln(1?0.25)

  ?x21ln(1?0.08)?x22ln(1?0.16)?x23ln(1?0.12)?x24ln(1?0.20),424?2?2?ai?djxij?100??xij?48000,i?1j?1?i?1j?1??4s.t.??xij?bi,i?1,2,

  ?j?1?x?0,且x为整数.ij?ij??利用lingo程序,求得x14?48,x24?32。

  求解的Lingo程序如下

  model:sets:plane/1..2/:a,b;factory/1..4/:d;link(plane,factory):p,x;endsets

  data:a=0.50.3333;b=4832;p=0.10.20.150.250.080.160.120.2;enddata

  min=@sum(link:x*@log(1-p));2*@sum(link(i,j):a(i)*d(j)*x(i,j))+100*@sum(link:x)<48000;@for(plane(i):@sum(factory(j):x(i,j))

  例4.1求解下列规划问题

  minz?|x1|?2|x2|?2|x3|?4|x4|,s.t.

  x1?x2?x3?x4?0,x1?x2?x3?3x4?1,x1?x2?2x3?3x4??.

  解一:直接用Lingo软件求解,Lingo程序如下

  16model:sets:row/1..3/:b;col/1..4/:c,x;link(row,col):a;endsets

  data:c=1224;b=01-0.5;a=1-1-111-11-31-1-23;enddata

  min=@sum(col:c*@abs(x));@for(row(i):@sum(col(j):a(i,j)*x(j))=b(i));@for(col:@free(x));end

  xi?|xi||x|?xi?0,vi?i?0,i?1,2,3,4,记

  22TTTx?[x1,x2,x3,x4],u?[u1,u2,u3,u4],v?[v1,v2,v3,v4],|x|?[|x1|,|x2|,|x3|,|x4|]T,则x?u?v,|x|?u?v,则可把模型变换为线性规划模型

  mincT(u?v),?A(u?v)?b,

  s.t.

  ?y?0.??1?1?11?1T??T其中c?[1,2,2,4],b?[0,1,?],A?1?11?3。

  ??2??1?1?23??解二

  先线性化,做变量变换ui?求解的Lingo程序如下

  model:sets:row/1..3/:b;col/1..4/:c,u,v,x;link(row,col):a;endsets

  data:c=1224;

  b=01-0.5;a=1-1-111-11-31-1-23;enddata

  min=@sum(col:c*(u+v));@for(row(i):@sum(col(j):a(i,j)*(u(j)-v(j)))=b(i));end

  注:(1)Lingo软件可以自动对带有绝对值的数学规划问题进行线性化。

  (2)Lingo线性化时,变量的个数至少扩大为原来的4倍,约束条件也增加很多;问题规模大时,可能Lingo软件就无法求解了;如果能手工进行线性化的话,尽量手工线性化。

  4.6.4非线性拟合

  ?(x),一般都使设已知(x,y)的观测值(xi,yi),i?1,2,?,n,要拟合一个函数y?f用最小二乘准则拟合,即所拟合的函数使得

  1?)?(y?yiii?1n2?(x),称为最小二乘拟合。

  ?i?f达到最小值,这里yi使用最小二乘法进行非线性拟合时,实际上是求多元函数的极值问题。Matlab在很多情形下只能求得一个局部极小值,Lingo算法比较先进,可能求得全局最优解。

  例4.11已知x,y的观测值见表4-6。用最小二乘法拟合函数y?表4-6x,y的观测值

  a。

  bxe?c255892x

  y

  6429657348拟合的Lingo程序如下

  model:sets:num/1..8/:x0,y0;endsets

  data:x0=62y0=4enddata

  min=@sum(num:(y0-a/(@exp(b*x0)+c))^2);@free(a);@free(b);@free(c);end

  65734825589;2;

  4.6.5数据传递的Lingo编程

  例4.12用Lingo编程求解如下的线性规划问题

  maxz?cTx,s.t.??Ax?b

  x?0,i?1,2,?,1000.?i其中A是用Matlab生成的500?1000矩阵,其中的每个元素是[0,1]上的均匀分布的随机数,c是相应维数的区间[10,100]上的随机整数列向量,b是相应维数的区间[100,200]上的随机整数列向量。

  产生数据并写入纯文本文件的Matlab程序:

  clc,clearc=randi([10,100],1000,1);a=rand(500,1000);b=randi([100,200],500,1);fid=fopen("data1.txt","w");fprintf(fid,"%4d\n",c);fprintf(fid,"%c\n","~");%继续写入字符‘~’

  fprintf(fid,"%f\n",a");

  %继续写入矩阵afprintf(fid,"%c\n","~")fprintf(fid,"%4d\n",b);fclose(fid);

  求解线性规划的Lingo程序:

  model:sets:col/1..1000/:c,x;

  14.6.6目标规划

  例4-13某市政府拟投入一笔资金和一定数量的劳动力建设两类公益项目A和B,目的是方便市民的生活,提高城市的生活质量。根据预测投入1万元资金和1百个劳动力·h(即每个劳动力用1h),分别可以建成1个项目A和两个项目B。如果投入1个劳动力·h需要支付10元,市政府为了用有限的资金和劳动力,并用最快的时间建成这批项目,服务于社会,服务于人民。市政府依次提出下面的四条要求。

  (1)至少要建50个项目A;

  (2)至多建设60个项目B;

  (3)至少要利用80万元资金和10000个劳动力·h;

  (4)总投入资金不超过预算120万元。

  试为该市政府制定一个满意的项目建设方案。

  解:设项目A,B的建设个数分别为x1,x2,各层目标的权重分别为pi(i?1,2,3,4),建立如下的目标规划模型

  ?????

  minp1d1?p2d2?p3(d3?d4)?p4d5row/1..500/:b;link(row,col):a;endsets

  data:c=@file(data1.txt);a=@file(data1.txt);b=@file(data1.txt);enddata

  max=@sum(col:c*x);@for(row(i):@sum(col(j):a(i,j)*x(j))

  10000x1?5000x2?10(100x1?50x2)?d3?d3?80000????

  100x1?50x2?d4?d4?1000??

  10000x1?5000x2?10(100x1?50x2)?d5?d5?120000??计算的Lingo程序如下。

  model:sets:level/1..4/:p,z,goal;variable/1..2/:x;s_con_num/1..5/:g,dplus,dminus;s_con(s_con_num,variable):a;obj(level,s_con_num)/11,22,33,34,45/:wplus,wminus;endsets

  data:ctr=?;goal=???0;g=5060800000100001200000;a=101110005501005110005500;wplus=01001;wminus=11110;enddata

  min=@sum(level:p*z);p(ctr)=1;@for(level(i)|i#ne#ctr:p(i)=0);@for(level(i):z(i)=@sum(obj(i,j):wplus(i,j)*dplus(j)+wminus(i,j)*dminus(j)));

  1@for(s_con_num(i):@sum(variable(j):a(i,j)*x(j))+dminus(i)-dplus(i)=g(i));@for(level(i)|i#lt#@size(level):@bnd(0,z(i),goal(i)));end

  最后求得的满意解为x1?79,x2?60。

  4.6.数据包络分析

  下面我们用Lingo子函数的编程来实现数据包络分析的计算。

  1978年A.Charnes,W.W.Cooper和E.Rhodes给出了评价多个决策单元(DecisionMakingUnits,简称DMU)相对有效性的数据包络分析方法(dataenvelopmentanalysis,DEA)。

  目前,数据包络分析是评价具有多指标输入和多指标输出系统的较为有效的方法。

  数据包络分析有多种模型,其中C2R(由Charnes,Cooper和Rhodes三位作者的第一个英文字母命名)的建模思路清晰、模型形式简单、理论完善。设有n个DMU,每个DMU都有m种投入和s种产出,设xij(i?1,?,m,j?1,?,n)表示第j个DMU的第i种投入量,yrj(r?1,?,s,j?1,?,n)表示第j个DMU的第r种产出量,vi

  (i?1,?,m)表示第i种投入的权值,ur(r?1,?,s)表示第r种产出的权值。

  v和u分别表示输入、向量Xj,Yj(j?1,?,n)分别表示决策单元j的输入和输出向量,TTu?(u1,u2,?,um)T,输出权值向量,则Xj?(x1j,x2j,?,xmj),Yj?(y1j,y2j,?,ysj),v?(v1,v2,?,vs)T。

  定义决策单元j的效率评价指数为

  (j?1,2,?,n).hj?(uTYj)/(vTXj),评价决策单元j0效率的数学模型为

  maxuTYj0vXj0T,?uTYj?1,j?1,2,?,n,?T

  s.t.

  ?vXj

  (4-1)

  ??u?0,v?0,u?0,v?0.1通过Charnes-Cooper变换:??tv,??tu,t?T,可以将模型(4-1)变化为vXj0等价的线性规划问题

  maxVj0??TYj0,j?1,2,?,n,

  (4-2)

  ??TXj??TYj?0,??Ts.t.

  ??Xj0?1,???0,??0.??例4.14(多指标评价问题)某市教委需要对六所重点中学进行评价,其相应的指标如表4-7所示。表14.8中的生均投入和非低收入家庭百分比是输入指标,生均写作得分和生均科技得分是输出指标。请根据这些指标,评价哪些学校是相对有效的。

  表4-7评价指标数据表

  学

  校

  生均投入(百元/年)

  非低收入家庭百分比(%)

  A

  89.3964.3B

  86.2599C

  108.1399.6D

  106.3896E

  62.4096.2F

  47.179.2生均写作得分(分)

  生均科技得分(分)

  25.222328.228729.431726.429127.229525.2222model:sets:dmu/1..6/:s,t,p;

  !决策单元(或评价对象),s,t为中间变量;

  inw/1..2/:omega;

  !输入权重;

  outw/1..2/:mu;

  !输出权重;

  inv(inw,dmu):x;

  !输入变量;

  outv(outw,dmu):y;endsets

  data:x=89.386.25108.13106.362.447.164.3999.69696.279.9;y=25.228.229.426.427.225.22232831291295222;enddata

  submodelsubopt:max=@sum(dmu:p*t);p(flag)=1;@for(dmu(i)|i#ne#flag:p(i)=0);@for(dmu(j):s(j)=@sum(inw(i):omega(i)*x(i,j));t(j)=@sum(outw(i):mu(i)*y(i,j));s(j)>t(j));@sum(dmu:p*s)=1;endsubmodel

  calc:@for(dmu(k):flag=k;@solve(subopt));endcalc

  end

  习题44.1求解线性规划问题

  max

  Z1?20x1?90x2?80x3?70x4?30x5?x1?x2?x5?30?x?x?3034??

  s.t.?3x1?2x3?12?3x?2x?x?4845?2??xi?0,

  i?1,?,54.2美佳公司计划制造Ⅰ、Ⅱ两种家电产品。已知各制造一件时分别占用的设备A、设备B的台时、调试工序时间及每天可用于这两种家电的能力、各销售一件时的获利情况,如表1-1所示。问该公司应制造两种家电各多少件,使获取的利润为最大。

  表1-121项目

  设备A/h设备B/h调试工序/h利润/元

  Ⅰ

  0612Ⅱ

  5211每天可用能力

  152454.3求解标准的指派问题,其中指派矩阵

  ?67589?63793??8111267C???97547?589610???98765?145??x1?????4.4已知矩阵A?426,x?x2,求二次型???????563???x3??22x12?x2?x3?1上的最小值。

  4.5求解数学规划问题

  100010?8??9??.6?7??9??f(x1,x2,x3)?xTAx在单位球面max?xi?1i

  s.t.Ax?1500?1其中A?(aij)500?1000,这里aij是服从均值为5,标准差为2的正态分布的随机数;1500?1表示500个元素全部为1的列向量。

  22

篇九:计算机生产销售计划lingo

  

  浅谈计算机软件Lingo在大学数学教学中的应用

  摘

  要:应用型本科院校越来越强调知识的应用,通过引入Lingo等教学辅助软件,帮助学生有效地解决诸如计算量偏大的数学规划等问题,让学生领略计算机软件辅助数学学习的高效性。本文结合Lingo软件和数学的特点,举例说明计算机软件Lingo在大学数学教学中的应用。

  关键词:Lingo;数学教育;应用

  0引言

  传统的数学教材以定义、定理等理论为主导,过于强调理论知识的证明与推导,却缺少知识的实际背景,缺乏解决实际问题的训练,这让不少同学在大学数学的学习过程中觉得课程难以理解,因此有必要对传统的数学教学进行相应的改革。伴随着计算机技术的飞速发展,数学软件也越来越成熟,这就为大学数学的教学提供了很好的技术支持。通过引入数学软件,可以帮助学生深入地理解抽象的理论知识点,辅助课题教学,提高大学数学的课堂教学质量,同时也可以提高学生的学习兴趣以及理论联系实践的能力。

  Lingo软件即交互式的线性和通用优化求解器,在线性规划、非线性规划等规划问题上有超强的优化计算能力。它的编程简洁明了、易学,数学模型不用做大的改动便可以直接采用Lingo语言编程,十分直观。因此,Lingo是适宜作为应用型本科院校数学教学的辅助教学软件。[1,2,2,4,5]1Lingo软件在数学教学中的应用

  本文讨论数学软件Lingo在数学教学中的应用,通过具体的实例来说明数学软件在计算规划数学模型问题上的实用和便捷。

  建立规划数学模型的基本步骤:第一,确定目标变量和决策变量,一般决策变量要求是非负的;第二,根据决策变量与变量的函数关系确定目标函数;第三,根据限制条件确定约束条件。1.1求解线性规划数学模型

  线性规划数学模型是指目标函数以及约束条件都是线性函数的数学模型。

  例1:某公司准备将含下列几种材料混合起来,成为一种含原料1为30%,含原料2为30%,含原料3为40%的新材料,如表1所示。

  问:应如何混合这些材料,既能满足新材料的要求,又花费最小?

  结果说明,当材料A、材料C、材料D各占1/3进行混合时,所产生的新材料费用最少为7.7。

  1.2求解非线性规划数学模型

  非线性规划数学模型是指目标函数以及约束条件至少有一个是非线性函数的数学模型。

  例2:建筑工地的位置(用平面坐标a,b表示,距离单位:公里)及水泥日用量d(吨)表2给出。有两个临时料场位于P(5,1),Q(2,7),日储量各有20吨。从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。两个新的料场应建在何处,节省的吨公里数有多大?

  结果说明,当新的料场建在(3.25,5.65)和(7.25,7.75)处时,总的吨公里数85.26604为最小。

  2结语

  类似Lingo软件,很多的计算机辅助软件在简化烦琐的数学运算及提高学生的学习积极性上具有很强的实用性,而数学的理论证明及数学的计算方法,能加深对数学知识的理解及培养学生的逻辑思维。所以应用型本科院校数学的教学应该结合数学的理论基础和相应的计算机辅助软件。这样可以有效提高数学的教学质量,同时提高学生积极思考及动手的能力。

  参考文献:

  [1]金晶晶.Lingo软件在数学建模竞赛中的应用[J].十堰职业技术学院学报,2010(04).[2]黄静静,王爱文.关于数学建模与实验课堂上LINGO软件教学的几点体会[J].教育教学论坛,2013(18).[3]吴有平,刘杰,何杰.多目标规划的LINGO求解法[J].湖南工业大学学报,2012(03).[4]洪文,朱云鹃,金震,赵洁.LINGO在运筹学实验教学中的应用[J].实验室研究与探索,2012(04).[5]刘扬.大学数学教学质量提升的途径研究与实踐[J].数学学习与研究,2012(17).

  -全文完-