资讯专栏INFORMATION COLUMN

docplex实战

yedf / 736人阅读

摘要:运筹做为一个运筹人多少知道些仿真优化软件当然高阶的运筹实践一定是以代码为基础的无论用什么代码最终也是在代码中首先建立所要优化问题的抽象模型一般都是一个优化问题如果你会的话就可以无障碍阅读接下来的内容如果你不会的话花半天时间学一下再来准备工作

运筹

做为一个运筹人,多少知道些仿真/优化软件,当然,高阶的运筹实践一定是以代码为基础的,无论用什么代码,最终也是在代码中首先建立所要优化问题的抽象模型,一般都是一个优化问题:

$$ minimize f_0(x) $$ $$ subject to f_i(x)leq b_i i=1,...,m. $$

如果你会python的话,就可以无障碍阅读接下来的内容,如果你不会python的话,花半天时间学一下再来!

准备工作

当然,使用docplex 的首先就要下载docplex,可以直接pip下载.

$ pip install docplex 

同时需要去下载一个cplex community edition ILOG CPLEX ,
可以点击try free edition,新建个账号后下载一个cplex community edition.

在安装完成后,在写一个python项目求解运筹问题之前呢,还要多做一点微小的工作.
对于cplex 的cp(Constraint Programming Modeling)模块,可以在py文件中添加

from docplex.cp.config import context
context.solver.agent = "local"
context.solver.local.execfile = "/media/senmu/source/program_exp/ibm/ILOG/CPLEX_Studio_Community128/cpoptimizer/bin/x86-64_linux/cpoptimizer"

将context.solver.local.execfile 修改成你本地的目录地址.

对于cplex 的mp(Mathematical Programming Modeling)模块,可以参考docplex mp 设置

设置好PYTHONPATH,比如linux在~/.bashrc中添加

export PYTHONPATH="/media/senmu/source/program_exp/ibm/ILOG/CPLEX_Studio_Community128/cplex/python/3.6/x86-64_linux"
开始一个例子之cp

首先是一个经典的八皇后问题 Eight_queens_puzzle
解决八皇后问题通常要用到递归,使用大量的计算资源,将其转为约束问题只需要添加all_diff约束
all_diff reference.

import docplex.cp

from docplex.cp.model import CpoModel
from sys import stdout

from docplex.cp.config import context
context.solver.agent = "local"
context.solver.local.execfile = "/media/senmu/source/program_exp/ibm/ILOG/CPLEX_Studio_Community128/cpoptimizer/bin/x86-64_linux/cpoptimizer"

NB_QUEEN = 8

mdl = CpoModel(name="NQueen")

x = mdl.integer_var_list(NB_QUEEN, 0, NB_QUEEN - 1, "X")

mdl.add(mdl.all_diff(x))

mdl.add(mdl.all_diff(x[i] + i for i in range(NB_QUEEN)))

mdl.add(mdl.all_diff(x[i] - i for i in range(NB_QUEEN)))

print("Solving model....")
msol = mdl.solve(TimeLimit=10)

if msol:
    stdout.write("Solution:")
    sol = [msol[v] for v in x]
    for v in range(NB_QUEEN):
        stdout.write(" " + str(sol[v]))
    stdout.write("
")
    stdout.write("Solve time: " + str(msol.get_solve_time()) + "
")
else:
    stdout.write("No solution found
")

查看更多例子

可以直接访问github docplex-examples 查看更多例子,也可以使用nbviewer查看. 在nbviewer上查看docplex

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43874.html

相关文章

  • spring boot - 收藏集 - 掘金

    摘要:引入了新的环境和概要信息,是一种更揭秘与实战六消息队列篇掘金本文,讲解如何集成,实现消息队列。博客地址揭秘与实战二数据缓存篇掘金本文,讲解如何集成,实现缓存。 Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控 - 掘金Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 评论0 收藏0
  • 从小白程序员一路晋升为大厂高级技术专家我看过哪些书籍?(建议收藏)

    摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...

    sf_wangchong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<