1.solver求解程序
2.运算符运算优先级:单目>双目;算术>逻辑>关系
3.常用函数:log(x):返回x的自然对数值;sign():(x>=0,返回1,x<0,返回-1;floor():向0取整;
lgm():log(x-1)! ->gamma函数的自然对数值;mod(x,y):返回x/y的余数;
4.概率函数
5.集合操作函数:
6.1 排班最优人数问题
在一周上五休二且每天所需最少人数确定条件下,求minz
解决思路:设R(i)为第i天开始工作人数,N(i)表示第i天所需最少人数。
如果星期一工作,则星期wrap(6,7),星期wrap(7,7)休息,需要建立总人数Z和R(i)、N(i)的关系。
每一天i都会有除了i+1,i+2的R(i)工作,所以Z-R(wrap(i+1,7))-R(wrap(i+2,7))>=N(i),其中wrap()是循环函数,比如R(wrap(i+1,7),若i+1<=7,则返回i+1,反之返回 'i-k*7'~(1,7)
Lingo程序如下:
model:
sets:
days/1..7/:el,sr,pw; !el-every least,sr-start ren,pw-practical worker;
endsets
data:
el=20,16,13,16,19,14,12; !每天所需最少职工数;
enddata
min=z;
z=@sum(days:sr);
@for(days:@gin(sr));
@for(days(i):z-sr(@wrap(i+1,7))-sr(@wrap(i+2,7))>=el(i));
@for(days(i):pw(i)=z-sr(@wrap(i+1,7))-sr(@wrap(i+2,7)));
end
7. 变量定界函数:bin(x):限制x为二进制数;bnd(L,x,U):限制L<=X<=U;gin(x):限制x为整数;free(x):取消对x的限制,即x可正可负;
赘述:bnd()函数表达变量的取值范围不列入约束条件,但是bnd函数比约束条件的求解速度快,而且有些版本还对约束条件还有限制;
8.1 free函数的使用
min=(x+2)^2+(y-2)^2;
@free(x);
8.2 bin函数的使用
model:
sets:
wupin/1..8/:w,p,yn;
endsets
data:
w=1,3,4,3,3,1,5,10;p=2,9,3,8,10,6,4,10;
enddata
max=@sum(wupin:yn*p);
@for(wupin:@bin(yn));
@sum(wupin:yn*w)<=15;
end
9.其它函数,warn('文字信息',逻辑表达式):如果逻辑表达式为真,则显示指导文字信息;if(逻辑表达式,表达式为真时的值,表达式为假时的值):真假决定返回值,常用来表示分段函数。
10.1 @if函数的使用:分段函数——生产计划安排,需要考虑的因素很多,形成约束。进货量、采购价、销售价与加工费之差、收益、资金限额、最大生产能力、成品含量比例。
p43/pdf53,本例着重于if函数的使用;f(x)、g(y)分别是两种商品进货量x,y的进货费用。现用if()分别实现进货费用函数。