lingo基础入门Day 2
lingo的标识符
命名规范
练习1:标识符
算术运算符
逻辑运算符
关系运算符
用lingo求线性方程组
用lingo求非线性方程组
百鸡百钱问题
总结
在lingo中,标识符是为了给对象命名所使用的字符串。
命名规范所有标识符必须以字母或者下划线开头,后续字母也只能是字母、数字或者下划线。
标识符最长32字符
标识符不区分大小写
X1 A_99 SUNDAY _TBX (正确)
-A 9C 8D A+B X.Y (错误)
-号如果是单目运算符表示取运算对象的相反数,如果是双目运算符表示减法运算。
例如:X=-A; X=C-A;
除负号运算符外,其他五种运算符都是双目运算符,也就是需要两个运算对象。
算数运算符的优先级别是同级从左到右
可能通过加括号()来改变运算次序
#EQ# 相等 #NE# 不相等 #GT# 大于 #LT#小于
#LE# 小于等于 #GE# 大于等于
#NOT# 逻辑反 #AND#逻辑与 #OR#逻辑或
逻辑表达式的值只有两种:
真TRUE
假FALSE
逻辑运算符有9个,除了#NOT#是单目运算符之外,其他的都是双目运算符,需要两个运算对象。
逻辑运算符的优先级分为三个级别
优先级运算符高#NOT#中#EQ#、#NE#、#GT#、#LT#、#LE#、#GE#小#AND#、#OR#
关系运算符lingo中没有严格的>和<关系,lingo将约束表达式中单独出现的<和>分别看做>=和<=。
如果要严格使用>和<运算,比如让A严格小于100,可以把精度编程:A+e<=100,这里的e是根据题目精度要求选择的一个小的正数。
用lingo求线性方程组举例:
4*x-y+3*z=5;
2*x+y+8*z=18;
5*x-2*y+9*z=7;
运算结果:
Feasible solution found.
Infeasibilities: 0.000000
Total solver iterations: 3
Elapsed runtime seconds: 0.07
Model Class: LP
Total variables: 3
Nonlinear variables: 0
Integer variables: 0
Total constraints: 3
Nonlinear constraints: 0
Total nonzeros: 9
Nonlinear nonzeros: 0
Variable Value
X 2.000000
Y 6.000000
Z 1.000000
Row Slack or Surplus
1 0.000000
2 0.000000
3 0.000000
用lingo求非线性方程组举例:
x+3*y^2-2*z=2;
x^2+5*y^2-z^3=3;
x+y^3+z^2=15;
运算结果:
Feasible solution found.
Infeasibilities: 0.4781647E-04
Extended solver steps: 5
Total solver iterations: 83
Elapsed runtime seconds: 0.26
Model Class: NLP
Total variables: 3
Nonlinear variables: 3
Integer variables: 0
Total constraints: 3
Nonlinear constraints: 3
Total nonzeros: 9
Nonlinear nonzeros: 6
Variable Value
X 4.999995
Y 1.000001
Z 3.000000
Row Slack or Surplus
1 -0.8894671E-06
2 -0.4781647E-04
3 -0.3839825E-06
百鸡百钱问题一个人用100个铜钱买了100只鸡,他说一只公鸡5个铜钱,一只母鸡3个铜钱,三只小鸡1个铜钱,编程求出他买的公鸡、母鸡、小鸡各多少只?
代码实现:
x+y+z=100;
5*x+3*y+z/3=100;
@GIN(x);
@GIN(y);
@GIN(z);
结果:
Feasible solution found.
Infeasibilities: 0.000000
Extended solver steps: 0
Total solver iterations: 2
Elapsed runtime seconds: 0.08
Model Class: PILP
Total variables: 3
Nonlinear variables: 0
Integer variables: 3
Total constraints: 2
Nonlinear constraints: 0
Total nonzeros: 6
Nonlinear nonzeros: 0
Variable Value
X 12.00000
Y 4.000000
Z 84.00000
Row Slack or Surplus
1 0.000000
2 0.000000
总结标识符的命名规范
算数运算符
逻辑运算符
关系运算符
用LINGO求解线性方程组
用LINGO求解非线性方程组
用LINGO求解高次方程组