Lingo运输+选址问题

几个命令:
@bin(x)表示x为0或1
@gin(x)表示x为整数
@free(x)表示x为任意实数
@bnd(1, x, u)表示x为[1,u]之间的实数
默认变量是非负实数
思考:1、如果x为-5到5之间的整数,如何表示?
答:@free(x);
@bnd(-5, x, 5);
@gin(x);
2、如果x∈{-1, 1},如何表示?

*** 运输+选址问题
某公司有6个建筑工地,位置坐标为(ai, bi)(单位:公里),水泥日用量di(单位:吨)
i 1 2 3 4 5 6
a 1.25 8.75 0.5 5.75 3 7.25
b 1.25 0.75 4.75 5 6.5 7.75
d 3 5 4 7 6 11

例题:
(1) 现有2料场,位于A[5, 1], B[2, 7], 记(xj, yj), j = 1, 2,日储量ej各有20吨
假设料场和工地之间有直线道路,指定每天的供应计划,即从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小
取决策变量c_ij表示i工地从j料场运来的水泥量。模型(线性模型)为:
在这里插入图片描述
代码正文:

model:

sets:                    ! 集合段。定义集合以sets开头,endsets结束;
S/1..6/: a, b, d;        ! 初始集合一维数组(/ /之间表示下标的取值范	围,1..6表示166个数字);
T/1..2/: e, x, y;        ! S与T称为数组的类型名,:后代表变量名;
U(S,T): c;               ! 衍生集合二维数组,类型Link, ()内为(行,列)
endsets

data:                                          !数据段。数据开头以data开头,enddata结束
a = 1.25    8.75    0.5    5.75    3    7.25;  !以行为顺序赋值
b = 1.25    0.75    4.75    5    6.5    7.75;
d = 3    5    4    7    6    11;
x = 5 2;
y = 1 7;
e = 20 20; 
enddata

min = @sum(T(j): @sum(S(i): c(i,j)* @sqrt((x(j)-a(i))^2 + (y(j)-b(i))^2))); 
    ! @sum是lingo的函数,作用是*某个集合的所有成员求指定表达式的和*,第一个参数为*集合名称*
(可以为初始集合或衍生集合),第二个参数是*表达式*,表示对这个表达式进行求和运算。@sum有索引(i,j)类似于下标

@for(S(i):@sum(T(j):c(i,j)) = d(i));
@for(T(j):@sum(S(i):c(i,j)) <= e(j)); 
    ! @for是lingo的函数,作用是对某个集合的所有成员生成一个约束表达式
    !第一个参数表示对哪个集合生成约束表达式,例如:Σ(j从12)cij,i = 1, 2...6。那么这时第一个参数就是
i对应的初始集合,生成了6个约束表达式
    !第二个参数是约束表达式的具体内容,此题具体内容就是求和

end
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值