摘要:運(yùn)籌做為一個(gè)運(yùn)籌人多少知道些仿真優(yōu)化軟件當(dāng)然高階的運(yùn)籌實(shí)踐一定是以代碼為基礎(chǔ)的無(wú)論用什么代碼最終也是在代碼中首先建立所要優(yōu)化問(wèn)題的抽象模型一般都是一個(gè)優(yōu)化問(wèn)題如果你會(huì)的話就可以無(wú)障礙閱讀接下來(lái)的內(nèi)容如果你不會(huì)的話花半天時(shí)間學(xué)一下再來(lái)準(zhǔn)備工作
運(yùn)籌
做為一個(gè)運(yùn)籌人,多少知道些仿真/優(yōu)化軟件,當(dāng)然,高階的運(yùn)籌實(shí)踐一定是以代碼為基礎(chǔ)的,無(wú)論用什么代碼,最終也是在代碼中首先建立所要優(yōu)化問(wèn)題的抽象模型,一般都是一個(gè)優(yōu)化問(wèn)題:
$$ minimize f_0(x) $$ $$ subject to f_i(x)leq b_i i=1,...,m. $$
如果你會(huì)python的話,就可以無(wú)障礙閱讀接下來(lái)的內(nèi)容,如果你不會(huì)python的話,花半天時(shí)間學(xué)一下再來(lái)!
準(zhǔn)備工作當(dāng)然,使用docplex 的首先就要下載docplex,可以直接pip下載.
$ pip install docplex
同時(shí)需要去下載一個(gè)cplex community edition ILOG CPLEX ,
可以點(diǎn)擊try free edition,新建個(gè)賬號(hào)后下載一個(gè)cplex community edition.
在安裝完成后,在寫(xiě)一個(gè)python項(xiàng)目求解運(yùn)籌問(wèn)題之前呢,還要多做一點(diǎn)微小的工作.
對(duì)于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 修改成你本地的目錄地址.
對(duì)于cplex 的mp(Mathematical Programming Modeling)模塊,可以參考docplex mp 設(shè)置
設(shè)置好PYTHONPATH,比如linux在~/.bashrc中添加
export PYTHONPATH="/media/senmu/source/program_exp/ibm/ILOG/CPLEX_Studio_Community128/cplex/python/3.6/x86-64_linux"開(kāi)始一個(gè)例子之cp
首先是一個(gè)經(jīng)典的八皇后問(wèn)題 Eight_queens_puzzle
解決八皇后問(wèn)題通常要用到遞歸,使用大量的計(jì)算資源,將其轉(zhuǎn)為約束問(wèn)題只需要添加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 ")查看更多例子
可以直接訪問(wèn)github docplex-examples 查看更多例子,也可以使用nbviewer查看. 在nbviewer上查看docplex
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43874.html
摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實(shí)現(xiàn)緩存。 Spring Boot 揭秘與實(shí)戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國(guó)慶假期了,給小伙伴們分享下,從小白程序員到大廠高級(jí)技術(shù)專家我看過(guò)哪些技術(shù)類書(shū)籍。 大家好,我是...
閱讀 1625·2023-04-25 14:12
閱讀 1099·2021-08-27 16:24
閱讀 2548·2019-08-30 15:44
閱讀 2928·2019-08-30 13:16
閱讀 1683·2019-08-29 14:10
閱讀 980·2019-08-29 13:54
閱讀 1312·2019-08-29 13:09
閱讀 1826·2019-08-26 18:37