最近在学lingo,感觉上手比较简单,也不知道自己感觉的对不对,哈哈
这是自己在OneNote上记得笔记,在此备份一下
如果有什么问题可以一起交流讨论啊
代码格式
model:
sets:
!此处为集合定义;
endsets
data:
!此处为数据导入;
enddata
calc:
!此处为计算段,专职已知数据的计算处理,不能含有变量;
endcalc
min\max=…; !目标函数;
@for(…); !约束条件;
…
end
数学函数
@smax(x1,x2,x3…xn)
返回x1,x2,x3…xn
@max() 一般对集循环函数取集里面的最大值
@abs(x) 绝对值
@sin(x)
@cos(x)
@tan(x)
@exp(x)
@log(x)
@mod(x,y)x除以y的余数
@lgm(x) 返回x的gamma函数的自然对数
@sign(x)
如果x<0返回-1,否则返回1
@floor(x)返回x的整数部分
@gin() 取整函数
@sum(setname(i):x(i))
@size(S1)S1为集合的名字,返回集合中元素的个数
约束函数(可结合逻辑函数使用)
@for
用法举例
@for(r(i)|i#ge#2:d(i)>=3)
@for(r(i):@for(c(j):x(i,j)<=y(i,j)));
逻辑运算符一般配合for约束语句使用
逻辑运算符
优先级高
#not# 否定该操作数的逻辑值
优先级中
#eq# 若两个运算数相等,返回true,否则false
#ne# 若两个运算数不相等,返回true,否则false
#gt# 若左边的运算符严格大于右边的运算符,则为true
#ge# 若左边的运算符严格大于等于右边的运算符,则为true
#lt# 若左边的运算符严格小于右边的运算符,则为true
#le# 若左边的运算符严格小于等于右边的运算符,则为true
优先级低
#and# 仅当两个参数都为true时,结果为true
#or# 仅当两个参数都为false时,结果为false
边界限定函数
@bin(x) 限制x为0或1
@bnd(L,x,U)限制L<= x <= U
@free(x) 取消对变量x的默认下界为0的限制
@gin(x) 限制x为整数
辅助函数
@if(logical_condition,true_result,false_result)
评价一个逻辑表达式logical_condition,如果为真,返回true_result,否则返回false_result