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()分别实现进货费用函数。