线性模型
lp.py
#这个例子从文件中读取LP模型并解决它。如果模型不可行或无界,则示例关闭,presolve并再次求解模型。如果模型不可行,示例计算一个不可还原的不一致子系统(IIS),并将其写入文件
import sys
import gurobipy as gp
from gurobipy import GRB
if len(sys.argv)<2:
print('Usage:lp.py filename')
sys.exit(0)
#阅读并求解模型
model=gp.read(sys.argv[1])
model.optimize()
if model.Status==GRB.INF_OR_UNBD:#型号状态==GRB.INF_OR_UNBD
#关闭presolve off以确定模型是否不可行或无界
model.setParam(GRB.Param.Presolve,0)
model.optimize()
if model.Status==GRB.OPTIMAL:#解的状态为最优解
print('Optimal objective : %g' %model.ObjVal)
model.write('medel.sol')
sys.exit(0)
elif model.Status!=GRB.INFEASIBLE:#解的状态为不可行
print('optimization was stopped with status %d' %model.Status)
#上式翻译:优化已停止,状态为:
sys.exit(0)
#模型是不可行的,有互相矛盾的条件存在,计算一个不可约的不一致子系统(IIS)
print('')
print('Model is infeasible')
model.computeIIS()
model.write("model.ilp")
print("IIS written to file 'model.ilp'")
#IIS是一种Web服务器软件,它可以在Windows操作系统上提供Web服务
在查询解决方案值前应始终检查解决方案状态
model . optimize ()
if model . Status == GRB . INF_OR_UNBD :#解的状态为不可行或无界
# 关闭Presolve以确定模型是否不可行或无界
model . setParam ( GRB . Param . Presolve , 0)
model . optimize ()
if model . Status == GRB . OPTIMAL :#解的状态为最优解
print ('Optimal objective : %g' % model . ObjVal )
model . write ('model .sol ')
sys . exit (0)
elif model . Status != GRB . INFEASIBLE :#解的状态为不可行
print (' Optimization was stopped with status %d' % model . Status )
#上式翻译:优化已停止,状态为
sys . exit (0)
解的状态可以分为三种:具有最优解,具有无界解以及无可行解
Presolve
Gurobi Class2笔记_sos约束_yeah_panda的博客-CSDN博客
lpmethod.py
import sys
import gurobipy as gp
from gurobipy import GRB
if len(sys.argv)<2:
print('Usage:lpmethod.py filename')
sys.exit(0)
#读模型
m=gp.read(sys.argv[1])
#用不同值的方法求解模型
bestTime=m.pams.timelimit
bestMethod=-1#赋初值
for i in range(3):
m.reset()#重置
m.params.method=i
m.optimize()
if m.Status==GRB:
bestTime=m.Runtime
bestMethod=i
#减少TiimeLimit(设定时间)参数,以节省时间与其他方法
m.Params.TimeLimit=bestTime
#Report which method was fastest
if bestMethod==-1:
print('Unable to solve this model')
else:
print('Solved in %g secomgs with Method %d' %(bestTime,bestMethod))
此处的range(3)表示的就是0(单纯形法)-3(并发)的求解Method
lpmod.py
#这个例子从一个文件中读取一个LP模型并求解它
# 如果模型可以求解,那么它找到最小的正变量,将其上界设置为0,
# 并以两种方式对模型进行解析,首先有高级开始,然后没有高级开始即从头开始
import sys
import gurobipy as gp
from gurobipy import GRB
if len(sys.argv)<2:
print('Usage:lpmod.py filename')
sys.exit(0)#正常退出
#读取模型并判断是否为LP模型
model=gp.read(sys.argv[1])
if model.IsMIP==1:
print('The model is not a linear program')
sys.exit(1)#非正常退出
model.optimize()
status=model.Status
if status==GRB.INF_OR_UNBD or status==GRB.INFEASIBLE or status==GRB.UNBOUNDED:
print('The model cannot be solved because it is infeasible or unbounded')
sys.exit(1)
if status!=GRB.OPTIMAL:
print('Optimization was stopped with status %d' % status)
sys.exit(0)
#找到最小变量值
minVal=GRB.INFINITY
for v in model.getVars():
if v.X>0.0001 and v.X<minVal and v.LB==0.0:
minVal=v.X#(最小函数值=v.X)
minVar=v#(最小变量=v)
print('\n*** Setting %s from %g to zero ***\n' %(minVar.VarName, minVal))
minVar.UB=0.0#设置上限为0
#从这个起点模型求解
model.optimize()
#节省迭代和时间信息
warmCount=model.IterCount
warmTime=model.Runtime
#重置模型并解析
print('\n*** Resetting and solving without an advanced start ***\n')
model.reset()
model.optimize()
coldCount=model.IterCount
coldTime=model.Runtime
print('')
print('***Warm start:%g iterations, %g seconds'%(warmCount,warmTime))#iteration:迭代次数
print('***Cold start:%g iterations, %g seconds'%(coldCount,coldTime))
sys.exit()函数
sys.exit()函数可以用于在程序执行过程中强制退出程序,会结束整个程序。
sys.exit()函数可以接受一个整数参数用于指定程序终止时的退出码。通常情况下,退出码为0表示程序正常退出,其他数值表示程序异常退出。
蓝色部分不计,橙色部分为第一个参数
从第一个参数开始遍历
下图的sys.argv即为绿色部分+紫色部分
绿色部分不计为参数,而紫色部分计。
总结
sys.argv[]是一个列表
sys.argv[0]是被调用的脚本文件名或全路径
sys.argv[1:]之后的元素就是我们从程序外部输入的,而非代码本身的,想要看到它的效果,就要将程序保存,从外部运行程序并给参数,这也是我们在cmd里面运行的原因。