docplex python入门实例,学习资源

docplex python入门实例,学习资源

1. docplex学习资源

cplex资源
其中新手入门一个建模实例推荐子链接Creating a MP model in a nutshell, 里面详细介绍了如何在Jupyter notebook里面建立一个完整的线性规划模型,也可以在Pycharm中迁移。

下面是我个人应用的一个建模实例,大家可以关注一下解决冲突约束的代码部分,在别的博文中提到的较少。当然我的方法也比较简单,感觉还不是最佳方案。

2. 建模实例

sensor location
b a p b_a^p bap: path-link相关矩阵 B B B的元素,矩阵的行对应path,列对应link

3. 代码

from docplex.mp.model import Model
from docplex.mp.conflict_refiner import ConflictRefiner
from docplex.mp.conflict_refiner import ConflictRefinerResult
import numpy as np

# 构建路径-路段相关矩阵
path = 20
link = 20

relevance = np.zeros((path,link))
# list记录每条path对应的link序列,list[i]表示第i条path
list = [[1,11,14,18,20],
        [2,35,14,18,20],
        [2,36,20],
        [1,11,14,19,31],
        [1,11,15,29,31],
        [1,12,25,29,31],
        [1,12,26,37],
        [2,35,14,19,31],
        [2,35,15,29,31],
        [1,11,14,18]]
for i in range(path):
    for j in list[i]:
        relevance[i][j-1]=1
print(relevance)

# 定义模型变量下标
links = [i for i in range(1,link+1)]

# 定义模型类型
mdl = Model('IP')

# 定义变量
x = mdl.binary_var_dict(links, name='x')
print(x[1]) # 注意,x[1]=x_1, 而不是x[0]=x_1

# 定义目标函数
mdl.minimize(mdl.sum(x[j] for j in links))

# 定义约束函数
num = 1 # 约束下标
for i in range(path):
    for k in range(i+1,path):
        mdl.add_constraint(mdl.sum(x[j + 1] * abs(relevance[i, j] - relevance[k, j]) for j in range(link)) >= 1, 'c' + str(num))
        num+=1
for i in range(path):
    mdl.add_constraint(mdl.sum(x[j+1] * relevance[i, j] for j in range(link)) >= 1, 'c' + str(num))
    num+=1

# 检查冲突约束,返回conflicts
conflicts = ConflictRefiner().refine_conflict(mdl)
result = ConflictRefinerResult(conflicts)
result.display()

# # 移除冲突约束,具体情况由上一步检查结果决定
# list = ['c11','c14'] # 手动输入(目前没找到其他方法)
# for item in list:
#     mdl.remove_constraint(item)

# 求解模型
solution = mdl.solve()
print(solution)
  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值