COPT Python API 调用

近年来国产COPT求解器在整数规划上取得了不错的成果,原有CPLEX 12.1 只能支持到python3.7,这就给COPT了一个机会。

首先是COPT的申请和激活,在其lib\python目录下

使用带python环境 运行以下命令

python setup.py install 

此时COPT将被添加到python环境中。

代码中的单个#代表变量。

#导入coptpy
from coptpy import *
#声明环境
env=Envr()
#创建模型
model=env.createModel()
#声明表达式,可以方便编辑,修改
expr=LinExpr()

#可使用以下方式声明一下不同规模的xij,例如x1[1~2],x2[1~10]这类多维变量
x=[VarArray() for i in range(len(#你的变量))]
u=[VarArray() for i in range(len(#你的变量))]

#批量添加变量
for j,# in enumerate(#) :
    x[j]=model.addVars(len(#),len(#),vtype=COPT.BINARY,nameprefix="x"+str(j))#添加二维变量
    u[j]=model.addVars(len(#),vtype=COPT.BINARY,nameprefix="u"+str(j))#添加一维变量

#采用list方法定义产生的数组,其维数会+1,使用方法也有所不同。
#在使用单个变量时需要注意其用法
#如下定义约束
for j in range(len(#)):
    model.addConstrs(quicksum(x[j][i,k] for i in range(len(#)))<=weaponNum[j][k] \
                     for k in range(len(#)))
    model.addConstrs(quicksum(x[j].sum(i,'*') for j in range(len(#))) >=1 for i in range(len(#)))
    
    #model.addConstrs((quicksum(x[j][i,k] for i in range(len(#)))-#)*1e8+1<=u[j][k] \
                     #for k in range(len(#)))
    #第三类约束为是否产生空洞约束,并更改为相应的损失函数。
for i in range(len(#)):
    for j in range(len(#)):
        for k in range(len(#)):
            expr+=x[j][i,k]*#
#定义目标函数
model.setObjective(expr,COPT.MINIMIZE)
#保存模型
model.write("#.lp")

#输出结果
model.solve()
if model.status == COPT.OPTIMAL:
    print("\nOptimal objective value: {0:.2f}".format(model.objval))
    vars = model.getVars()
    print("Variable solution:")
    for var in vars:
        if var.x>0.5:
            print(" {0} = {1:.2f}".format(var.name, var.x))


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值