lingo入门教程之二 --- 集合运用

lingo中的集合用法很多,这里主要通过几个例题来进行讲解

对于每一个问题,都要先找到对应的目标函数,然后对相应值进行初始化,然后找到约束条件等进行求解

例1:SAILCO公司需要决定下四个季度的帆船生产量。下四个季度的帆船需求量分别是40条,60条,75条,25条,这些需求必须按时满足。每个季度正常的生产能力是40条帆船,每条船的生产费用为400美元。如果加班生产,每条船的生产费用为450美元。每个季度末,每条船的库存费用为20美元。假定生产提前期为0,初始库存为10条船。如何安排生产可使总费用最小?


分析:用DEM,RP,OP,INV分别表示需求量、正常生产的产量、加班生产的产量、库存量,则DEM,RP,OP,INV对每个季度都应该有一个对应的值,也就说他们都应该是一个由4个元素组成的数组,其中DEM是已知的,而RP,OP,INV是未知数。

 MODEL: !模型开始;

SETS: !集合定义开始;
QUARTERS/1,2,3,4/:DEM,RP,OP,INV;
!集合QUARTERS类似于数组,DEM等表示该集合包含的元素,这里一共有四个元素。/1,2,3,4/表示该集合的大小,对应着实际问题的每一个季度
/1,2,3,4/等价于/1..4/,当集合大小比较大时,建议写后者;
ENDSETS !集合定义结束;

MIN=@SUM(QUARTERS:400RP+450OP+20*INV);
!@sum(),求和函数,表示对该集合所有依次进行求和,由于这里是对所有,所以省去了循环变量,
这里等价于@SUM(QUARTERS(i): 400*RP(i) +450*OP(i) +20*INV(i) );

@FOR(QUARTERS(I):RP(I)<40);
!@for类似于c/c++中的for循环,对其中操作循环进行;

@FOR(QUARTERS(I)|I#GT#1: !|表示对于循环的限制,#GT#表示大于,这里具体含义:I大于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 !模型结束;


接下里这里例子会讲到关于集合的派生问题,这个跟c++里面的继承与派生比较相像

例2:建筑工地的位置(用平面坐标a,b表示,距离单位:公里)及水泥日用量d(吨)下表给出。有两个临时料场位于P (5,1), Q (2, 7),日储量各有20吨。从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值