lingo对于一些线性或者非线性的规划,优化问题非常有效
首先介绍一下,在lingo中运行程序时出现的页面(在工具栏点击类似靶子一样的图标便可运行)
Solver status:求解器(求解程序)状态框
Model Class:当前模型的类型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I开头表示IP,以PI开头表示PIP)
State:当前解的状态: "Global Optimum", "LocalOptimum", "Feasible", "Infeasible“(不可行), "Unbounded“(无界), "Interrupted“(中断), "Undetermined“(未确定)
Object:解的目标函数值
Infeasibility:当前约束不满足的总量(不是不满足的约束的个数):实数(即使该值=0,当前解也可能不可行,因为这个量中没有考虑用上下界命令形式给出的约束)
Iteration:目前为止的迭代次数
Extend solverstatus:扩展的求解器(求解程序)状态框
Solver type:使用的特殊求解程序:
Bestobj :目前为止找到的可行解的最佳目标函数值
Objbound:目标函数值的界
Steps:特殊求解程序当前运行步数:
Active:有效步数
Variables(变量数量):
变量总数(Total)、
非线性变量数(Nonlinear)、
整数变量数(Integer)。
Constraints(约束数量):
约束总数(Total)、
非线性约束个数(Nonlinear)。
Nonzeros(非零系数数量):
总数(Total)、
非线性项系数个数(Nonlinear)。
GeneratorMemory Used (K) (内存使用量)
ElapsedRuntime (hh:mm:ss)(求解花费的时间)
运行之后页面介绍(这里的运行界面并不是与上面的运行过程中出现界面一致,即并非来自于同一个程序运行出现)
第一行表示在经过457次迭代后得到局部最优解
第二行给出该局部最优解的具体值
下面给出取局部最优值时,x1 x2的具体取值
这里求解的是局部最优解,如果想求出全局最优解,可以进行页面设置:lingo --> option --> global solver --> 勾选use global solver
对于运行结果也可以另存为,格式一般为ldt,因为有时候对于求解一个问题,或许需要运行很久才可以得出结果,所以没必要每次为了看结果都运行,而是运行成功一次后便把结果保存下来
注意事项
LINGO总是根据“MAX=”或“MIN=”寻找目标函数;
程序语句的顺序一般不重要,既可以随意调换;
程序运用函数时都是以@开头;
程序中的变量默认为非负数,想要改变变量类型必须有相应函数调整
程序中变量不区分大小写;
语句必须以分号结尾;
注释以!开始,且注释语句后面必须也有分号,注释默认注释到第一个分号处,意思是分号前面会全部被注释掉。
例题:
max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; !目标函数;
!约束条件;
x1<=2*x2;
x1+x2<100;
@gin(x1);@gin(x2); !x1 x2非负整数