docplex实战

运筹做为一个运筹人,多少知道些仿真/优化软件,当然,高阶的运筹实践一定是以代码为基础的,无论用什么代码,最终也是在代码中首先建立所要优化问题的抽象模型,一般都是一个优化问题: $$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 contextcontext.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.cpfrom docplex.cp.model import CpoModelfrom sys import stdoutfrom docplex.cp.config import contextcontext.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 = 8mdl = 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 ...

May 23, 2019 · 1 min · jiezi