内容简介:做为一个运筹人,多少知道些仿真/优化软件,当然,高阶的运筹实践一定是以代码为基础的,无论用什么代码,最终也是在代码中首先建立所要优化问题的抽象模型,一般都是一个优化问题:$$ minimize\ \ \ \ \ \ f_0(x) $$ $$ subject\ to\ \ f_i(x)\leq b_i\ \ \ i=1,...,m. $$如果你会python的话,就可以无障碍阅读接下来的内容,如果你不会python的话,花半天时间学一下再来!
运筹
做为一个运筹人,多少知道些仿真/优化软件,当然,高阶的运筹实践一定是以代码为基础的,无论用什么代码,最终也是在代码中首先建立所要优化问题的抽象模型,一般都是一个优化问题:
$$ 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约束
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("\n")
stdout.write("Solve time: " + str(msol.get_solve_time()) + "\n")
else:
stdout.write("No solution found\n")
查看更多例子
可以直接访问github docplex-examples 查看更多例子,也可以使用nbviewer查看. 在nbviewer上查看docplex
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 「Flask实战」鱼书项目实战一
- 「Flask实战」鱼书项目实战三
- 「Flask实战」鱼书项目实战四
- 「Flask实战」鱼书项目实战六
- RocketMQ实战系列从理论到实战
- 「Flask实战」flask鱼书项目实战二
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Impractical Python Projects
Lee Vaughan / No Starch Press / 2018-11 / USD 29.95
Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!