1、LINGO的基本知识,美国LINDO公司的主要产品: LINDO: Linear INteractive and Discrete Optimizer (V6.1) LINGO: Linear INteractive General Optimizer (V8.0) LINDO API: LINDO Application Programming Interface (V2.0) Whats Best!: (SpreadSheet e.g. EXCEL) (V7.0),一、一个最简单的LP(线性规划)问题,目标函数,约束条件,下面我们看一下在LINGO中如何解决这个简单的问题。(LP01.lg

2、4)每条语句必须用“;”结束。,二、LINGO中的集(合),有了集合,许多类似的约束条件就可以简化。,下面定义一个简单的集合: SETS: CARS/car1,car2,car3/:topspeed,price; ENDSETS,其中,CARS是集合名,是一个标记; /car1,car2,car3/是集合中的成员列表(类似于集合中的元素); topspeed和price则是car1,car2,car3的属性,如car2的topspeed为180km/h,price为40万; SETS和ENDSETS为LINGO中定义集合域的关键词。,下面定义一个集合: SETS: stus/john,jill

3、,rose,mike/:sex,age; links(stus,stus)|sex( ENDSETS,注:stus中的sex属性有1和0两个值,分别表示男生和女生。 可以赋值为: topspeed100,180,220; price20,40,65; 还可以赋值为: topspeed,price100,20,180, 40,220,65;,三、模型的数据域和初始域给集合中的属性赋值,在赋值时,我们还可以输入?,这样,在程序运行时,会出现如图所示的提示框,让我们输入需要的值。,Sets: days/mo,tu,we,th,fr,sa,su/:needs,cost; Endsets Data ne

4、eds,cost=20,100; !这时集合中的所有元素的needs和cost属性值相同; enddata,模型的初始域的赋值方法和数据域赋值方法相同,不过作用不同而已。 模型的初始域在解非线性规划时才能发挥作用,为某些属性选一个好的初始值可以加快模型的求解速度。具体格式如下:,Init: X,Y0,0.1; Endinit,四、LINGO中的函数,LINGO中的函数有基本运算符,数学函数,金融函数,变量限定函数等。这里我们看一下集合循环函数,这是lingo中的特色。其余函数的使用与该函数一致。,FOR 用于对集合的所有元素产生约束; SUM 计算出基于集合元素表达式的总和; MIN 求出基于

5、集合元素的表达式的最小值; MAX 求出基于集合元素的表达式的最大值。 下面我们用例子来体会每个函数的运用方法: Eg1:SETS: TRUCKS/MAC,PET,FORT,DOD/:HAUL; ENDSETS,FOR(TRUCKS(T):HAUL(T)2500); 上面这个句子就表示了以下几条句子的意思: 1 HAUL( MAC) = 2500 2 HAUL( PET) = 2500 3 HAUL( FORT) = 2500 4 HAUL( DOD) = 2500 就是每个卡车的装载量小于等于2500。,Eg2:sets: set1/v1,v2,v3,v4/:demand; endsets

6、data: demand= 1 3 4 6; enddata total_set1=sum(set1(i):demand(i); min_set1=min(set1(i):demand(i); max_set1=max(set1:demand); 运行情况看eg2.lg4。,工厂定位:0/1变量; 匹配问题:元素过滤器的使用(稀疏集) 职员分配:选看; PERT:模型中可以没有目标函数,选看; Eg_excel:与EXCEL的连接示例;,!(工厂定位模型)某公司计划增加一些产品加工点(工厂),有三个位置可供选择。现有四个客户需要该公司的产品且需要量已知。在每一个位置建立工厂都有与其关联的月运作费用,从工厂到客户的运输成本也不相同。此外工厂的运输能力也是有限的,不得突破它的生产能力。现在需要决定哪些工厂要开工?开工的工厂给每个客户运送多少产品使的总运输成本和工厂月运作费用之和最少 !注:各个加工点的月运作费用分别为91,70,24。 各