Skip to main content

适用于 Python 的 IBM 决策优化 CPLEX 建模

项目描述

欢迎使用适用于 Python 的 IBM 决策优化 CPLEX 建模。根据 Apache 许可证 v2.0 获得许可。

使用这个库,您可以快速轻松地为您的应用程序添加优化功能。您需要 IBM ILOG CPLEX Optimization Studio 来求解模型。

该库由 2 个模块组成:

  • IBM Decision Optimization CPLEX Optimizer Modeling for Python - 带有命名空间 docplex.mp

  • IBM Decision Optimization CP Optimizer Modeling for Python - 使用命名空间 docplex.cp

在本地使用 CPLEX 求解需要在您的机器上安装 IBM ILOG CPLEX Optimization Studio V12.8 或更高版本。

这个库是numpy友好的。

文档

例子

安装

  • 点安装 docplex

变更日志

在 2.23.222 中更改:

  • 支持 CPLEX Optimization Studio 22.1 运行时。

  • docplex.mp 中
    • 支持多目标优化的参数集。

    • 多目标优化的错误修复。

    • 更正当前 CPLEX 产品的文档 URL。

    • 删除已弃用的docloud_context

    • 使用 22.1 进行模型构建的性能改进

  • docplex.cp 中
    • 添加了一个新模块 blackbox 以允许新的 blackbox 功能特性

    • 编写了有关黑盒功能的完整文档

    • 添加了一个新的 SearchType 'Neighborhood'

    • 修复了 modeler.same_common_subsequence 中的错误

    • 修复了实际求解参数的计算顺序问题。

在 2.22.213 (2021.09) 中更改:

  • 删除了 zeppelin 示例

  • docplex.mp 中
    • 添加了具有可变数量参数的 Model.sum() 变体:Model.sums()

    • 删除了所有 Python2 兼容性代码

    • 在求解细节中添加了确定性时间。

    • 线性松弛器现在松弛 SOS 变量集(线性和松弛)

    • 修复了具有二次子目标的 Model.solve_with_goals() 上的错误

    • 修复了 SolveSolution.kpi_value_by_name 中的错误

    • 修复了 SolveSolution.get_value_dict() 中关于精确过滤的错误

    • 修复了使用 NaN 值更新约束 rhs 现在引发异常的错误。

  • docplex.cp 中
    • 在 CpoModelSolution 上添加新方法 get_objective_value()、get_objective_bound() 和 get_objective_gap()

      和 CpoSolveResult 直接访问第一个目标、界限或间隙。

    • 支持真正调用 abort_search() 而不是杀死求解器。

    • 将方法 get_parameters() 添加到 CpoSolver 以检索实际求解参数。

    • 修复实际求解参数的计算顺序问题。

在 2.21.207 (2021.06) 中更改:

  • docplex.mp 中
    • 添加对从不同模型导入解决方案的支持,提供变量

      可以在两个模型之间匹配(Model.import_solution)

    • 添加了上下文功能以临时修改模型的各个方面:

      model_parameters更改块中的参数,model_objective设置块中的临时目标。

    • 现在不推荐使用命名表达式,如果需要,请使用临时变量。

    • 约束中表达式的显示是可定制的:使用空格分隔符(或不使用),

      为非常长的表达式设置最大长度。

    • 修复了对 Var 类的文档引用,从线性移动到 dvar

    • 修复了未传递优先级的多目标模型的 LP 导出错误

  • docplex.cp 中
    • 将上下文属性solve_with_start_next 替换为solve_with_search_next,保持升序兼容性。

    • 支持求解器参数 ModelAnonymizer 为 CPO 文件格式的所有模型元素(KPI 除外)生成随机名称。

    • 优化从 Python 表达式生成 CPO 表达式

    • 区间变量解元组现在被命名为元组。

    • 方法 CpoModel.add() 现在接受多个表达式(或表达式列表)以添加到模型中。

在 2.20.204 (2021.02) 中更改:

  • docplex.mp 中
    • 添加对将解决方案和解决方案池导出为 SOL 格式的支持。

    • 添加用于更改批量变量边界的快速方法:

      Model.change_var_lower_bounds,Model.change_var_upper_bounds

    • 重置 cplex 12.10 的随机种子值,与 COS 发布值不同。

    • 改进了变量创建的性能

    • 删除了有关在求解中访问已弃用的“solve_status”的警告。

    • docplex.mp.AdvModel 现在默认启用检查器以避免 Python 错误。

      由用户决定是否禁用类型检查以获得最佳性能。

    • 修复了有关未在 MPS 和 SAV 中打印更新的变量边界的错误

    • 更改了默认舍入行为:默认情况下不舍入解决方案值。

  • docplex.cp 中
    • 修复阶跃函数操作的问题。

    • 在冲突优化器解决方案对象中添加状态。

    • 修复了一个错误,如果没有冲突,则不会以 CPO 格式发送和接收冲突。

    • 增强模型解决方案的打印。

    • search_next() 方法只返回模型的新解。特别是,如果解决方案状态刚刚从可行变为最佳,则不会返回新的解决方案。

    • 完全返工模型统计(CpoModelStatistics)

    • 在 CpoRefineConflictResult 的 write 方法中添加参数 add_cpo

在 2.19.202 (2020.12) 中更改:

  • docplex.mp 中
    • 现在支持将模型导出为 SAV.gz 格式。

  • docplex.cp 中
    • 向 CpoModel 添加一个新方法 remove_expressions(),它可以一次性删除表达式列表。

    • 更新文档以描述如何设置私有求解器参数。

    • 添加功能以将上下文导出和导入为平面文件。

    • 修复调用 constant() 建模函数的字符串表示的错误。

    • 添加 JSON 过滤器,以防目标的双重相同值。

    • 添加功能以将上下文导出和导入为平面文件。

    • 修复调用 constant() 建模函数的字符串表示的错误。

    • 添加 JSON 过滤器以防目标值为双精度。

在 2.18.200 (2020.11.#3) 中更改:

  • docplex.mp 中
    • 最新支持的 CPLEX Optimization Studio 现在是 20.1

在 2.17.196 (2020.11.#2) 中更改:

  • docplex.mp 中
    • 修复了酸洗的错误:酸洗模型中约束的版本引发了错误

    • 修复了酸洗的错误:无法酸洗具有分段线性约束的模型

  • docplex.cp 中
    • 添加环境变量 DOCPLEX_CP_CONTEXT 修改配置

    • 添加新模块 check_list 以打印有关执行环境的报告

    • 从文档中删除 DOcloud(包括代码)

    • 返工定制配置和更好地支持默认目录

    • 添加新的配置参数 model.sort_names 以驱动 CPO 文件格式的变量声明排序。

    • 修复了使用本地求解的 abort_search 可能导致 Python 崩溃的问题。

在 2.16.196 (2020.11) 中更改:

  • docplex.mp 中
    • 添加Model.add_quadratic_constraints()添加一批二次约束

    • 添加Model.populate_solution_pool()以获得对解决方案池的本机支持

    • 支持 CPLEX 20.1

    • 与 Python 3.8 兼容(仅与 CPLEX 20.1 兼容)

    • 能够改变多目标的绝对和相对容差

    • Model.if_then的优化:当条件的形式为b==1(或 0)时,不生成额外的布尔变量

    • 为了解决问题,docplex.mp现在使用cplex模块(如果已安装)。如果不是,则 docplex.mp 检查最新安装的 CPLEX Optimization Studio (COS) 版本(使用 CPLEX_STUDIO_DIRXXX 环境变量),如果找到 COS,则使用 cplex,除非引擎配置另有说明

  • docplex.cp 中
    • 将 pngfile= 参数添加到 visu.show() 方法以存储在 PNG 文件中,而不是在屏幕上显示。

    • 使参数和求解器信息在细化冲突解决方案中也可用。

    • 添加一个用于表示整数变量域的 IntegerDomain 类,具有特定的 __str__ 方法

    • 添加新函数 ceil()、floor()、trunc()、round() 和 sgn()

    • 删除 Python 38 生成的所有警告

    • 使用 CumulExpr 和零优化添加表达式的创建

    • 在生成 CPO 格式时实现通用模型表达式的可配置因式分解

    • 在建模时添加对 scal_prod() 数组大小的检查

    • 添加 strict_lexicographic() 并在建模时检查 strict_lexicographic() 和 lexicographic() 数组大小。

    • 添加失败解释作为新方法 explain_failure() 允许记录失败标签或获取一个或多个失败的详细信息。

    • 通过详细的错误和可配置的超时延迟来增强对本地求解子进程超时的管理

    • 为了解决问题,docplex.cp现在使用cpoptimizer可执行文件(如果已安装)。如果不是,则 docplex.cp 检查最新安装的 CPLEX Optimization Studio (COS) 版本(使用 CPLEX_STUDIO_DIRXXX 环境变量),如果找到 COS,则使用 cpoptimizer,除非引擎配置另有说明

    • 支持搜索/下一个序列中的最后一个最优解

    • 在所有 next() 解决方案中支持求解器参数

    • 在附加到运行结果的过程信息中添加求解器版本

在 2.15.194 (2020.07) 中更改:

  • docplex.mp 中
    • 添加 Model.quadratic_dual_slacks()

    • 修复了多目标中的错误:目标被错误地四舍五入

    • 修复了 Model.report() 中的错误:未显示多个目标值()

  • docplex.cp 中
    • 在优化冲突结果中添加 CPO 格式的冲突

    • 修复解析 CPO 模型的 KPI 部分时的问题

    • 将方法 add_constraint() 添加到模型以与 docplex.mp 兼容

    • SolveResult 的注释方法 get_fail_status() 已弃用。

    • 修复 collections.abc 中 deque 导入错误的问题

在 2.14.186 (2020.05) 中更改:

  • 更新了 Watson 工作室笔记本中的跟踪事件。

  • docplex.mp 中
    • Model.solve() 不会在云上使用solve,除非代理专门设置为“docloud”。

在 2.13.184 (2020.03) 中更改:

  • 删除了对docloud包的依赖。现在您需要使用pip install docloud显式安装软件包才能使用 DOcplexcloud。

  • docplex.mp 中
    • 添加了 Model.export_as_mps_string()、Model.export_as_sav_string()

    • 修复了 dettime_limit 的错误:使用确定性时间限制求解

      被误解为解决失败,返回 None。

    • 修复了 cplexcloud 解决的错误:处理的节点数始终为零。

    • 重复求解错误地从搜索开始重新开始,现在从最后一次求解停止的位置开始。

    • 将关键字参数“time_limit”添加到 Model.solve() 以设置临时时间限制。

    • 添加了新方法 SolveSolution.is_valid_solution()

    • 修复了 ModelReader 中的一个错误:从 SAV 或 MPS 读取时,范围约束边界被反转。

    • 修复了 Model.set_lex_multiobj() 中的错误:参数 abstols,reltols 被忽略。

    • 为 Model.add_indicator_constraints() 添加了适当的类型检查

    • 添加 docplex.mp.check_list/py 以检查本地安装。

  • docplex.cp 中
    • 解析 CPO 文件时启用 #line 指令的读取

    • 从公共参数中删除参数 LogSearchTags

    • 修复了一个关于编译 CPO 格式的 KPI 表达式的小问题

在 2.12.182 (2019.12) 中更改:

  • docplex.mp 中
    • 添加了一个 LinearRelaxer 类来制作 MIP 模型的线性化副本(如果可能)。见类docplex.mp.relax_linear.LinearRelaxer

    • 冲突优化器默认行为现在与 CPLEX 交互相同(新行为更快)。

    • 错误修正:k*x 形式的表达式在修改时没有通知约束。

    • 修复:在模型构造函数中设置cts_by_name=True时错误地打印消息“忽略的关键字参数” 。

在 2.11.176 (2019.11) 中更改:

  • 添加了对 CPLEX 12.10 的支持

  • docplex.mp 中
    • 逻辑表达式、二进制变量和约束现在可以使用逻辑运算符自由嵌套。

    • 修复了多目标问题的日志中“CPLEX 错误 1217”的打印。

    • 修复了将 log_output 设置为文件名时的错误:文件已创建,但为空。

在 2.10.155 (2019.08) 中更改:

  • 修复了 result var 设置为 0 时 logical_and() 中的错误。

在 2.10.154 (2019.07) 中更改:

  • 修复了 Python 3.7 中进行数据初始化时发生的 TypeError。

在 2.10.151 (2019.07) 中更改:

  • docplex.mp 中
    • 修复了读取没有名称的 SAV 文件时 ModelReader 中的错误

    • 修复了 mip 启动中的一个错误,该错误阻止了带有分段函数的 mip 启动正常工作。

    • 使用推导式修复了 Model.add_indicators() 上的错误(调用了 len())。

    • 添加了对表达式中的“!=”(不等于)运算符的支持。

    • 阐明了四种类型的检查器:on、off、numeric 和 full。在模型创建时传递 checker=<name> 以指定使用哪个检查器。

    • 修复了解决方案 JSON 编码器中针对非凸 QP 问题的错误。

    • 添加对惰性约束的直接支持,请参见 Model.add_lazy_constraints()

    • 添加对用户剪切的直接支持,请参见 Model.add_user_cut_constraints()

    • 获取 LP 问题中变量的基础状态,请参阅Var.basis_status

    • 读取 MIP 启动文件(MST 格式)

    • 允许为 MIP 解决方案设置工作量级别。

    • 读取基础状态文件(BAS 格式)

    • 读取可变优先顺序(ORD 格式)

    • 修复了功能 KPI 中的错误,未传递解决方案参数。

    • 在模型创建时启用约束名称字典:Model(cts_by_name=True)

    • 多目标现在正确腌制

    • 多目标现在复制到 Model.copy()

    • 编写了有关进度侦听器的完整文档

    • 添加了 Model.set_lp_start_basis()为 LP 问题提供初始基础。

  • docplex.cp 中
    • 尝试访问不存在的解决方案成员时,会引发异常而不是返回 None。

    • 添加一个新的 map_solution 函数,该函数将 Python 对象中的所有模型表达式替换为求解结果中的值。

    • 在 CPO 解析器中,修复了在开始点部分读取 #line 语句的问题。

    • 在 CPO 解析器中,跳过“startingPoint”部分中的实验部分“表达式”。

    • 简化区间变量域的编写,简化为单个值。

    • 添加第二个目标函数现在会引发异常

    • 使用共享库添加新的实验性本地求解。

    • 启用迭代器以指定整数变量的域

    • 在 docplex.cp.solver 中添加全局方法 get_version_info() 和 get_solver_verion()。

    • 默认情况下,生成没有显式格式版本的 CPO 模型。

    • 在 CpoParameters 对象上添加一个方法 reset()。

    • 建模方法 allowed_assignments() 和forbidden_​​assignments() 现在可以接受一个空的元组列表。

    • 在 CpoModelSolution 对象上,添加一个函数 map_solution() 以将变量替换为 python 对象中的值。

    • 为 LP 模型添加解析器

    • 添加以 gzip 和 zip 格式导入 CPO、MZN 和 LP 模型的可能性。

    • 增强对 cpoptimizer.exe 引发的意外错误的管理

在 2.9.141 (2019.03) 中更改:

  • docplex.mp 中
    • 由于该服务即将结束,删除了指向 rawgit.com 的链接。

    • Model.solve_lexicographic() 已弃用。此方法应用于在 COS 12.8 中执行字典求解,但在 COS 12.9 中,应使用 Model.set_multi_objective() 求解具有多个目标的问题。

  • docplex.cp 中
    • 添加 CPO Solver 12.9 支持的 KPI

    • 更新 CPO 解析器以读取格式 12.9 的 KPI 部分

    • 使用 KPI 添加新示例。

在 2.8.125 (2018.10) 中更改:

  • 不推荐使用求解器代理“docloud”进行求解。现在最好使用本地求解器求解模型,或者可以将 python 源提交给 DOcplexcloud 求解服务。请参阅https://ibm.biz/BdYhhK

  • docplex.mp 中
    • 不推荐使用solve_lexicographic。在未来的版本中,将提供一个新的 API 来支持多目标。

  • docplex.cp 中
    • 修复 no_overlap()、always_constant() 和 always_equal() 中布尔指标的问题。

    • 允许将模型解决方案直接用作起点(忽略不是整数或区间 var)。

    • 在 CpoIntVar 和 CpoIntVarSolution 上添加方法 domain_min()、domain_max()、domain_iterator() 和 domain_contains()。

    • 默认求解器代理现在是“本地”而不是“docloud”。所有示例都因此修改。

在 2.7.113 (2018.07) 中更改:

  • docplex.mp 中
    • 将常数表达式乘以二次表达式会引发异常。现在返回二次表达式和常数值的乘积。

    • 云上的 Model.solve_lexicographic() 现在将先前的传递解决方案作为 MIP 开始发送(针对 MIP 问题)

    • 二次约束的松弛总是返回零。现在返回正确的值。

    • 访问未添加到模型的约束的对偶(或松弛)返回零;现在它引发了一个例外。约束必须属于模型才能返回有效的对偶(或松弛)值

    • 具有不可行域的范围约束(即 lb > ub)并没有解决。现在他们提出了一个建模异常。

    • 将两个绝对值表达式相乘会引发异常。现在修好了。

    • 在变量字典中使用元组时,默认名称生成用于生成不符合 LP 的名称,因为 ( 和 )。现在名称生成器使用不带括号的“_”分隔符格式化元组。

  • docplex.cp 中
    • 在单独的包 docplex.cp.fzn 中拆分 fzn 内容

    • 优化 FZN 解析器中数组的构造

    • 增强 FZN 解析器并节省 30% 的时间

在 2.6.94 (2018.04) 中更改:

  • docplex.cp 中
    • 允许 CpoModel.add() 接受约束列表。

    • 修复了将布尔常量数组转换为 CPO 表达式的错误。

    • 扩展 CpoModel 方法 set_parameters() 以接受字典和/或使用命名参数的可选更新列表。

    • 方法 CpoModel.set_parameters() 现在克隆参数中给出的 CpoParameters 对象。

    • 添加一个新方法 CpoModel.add_parameters() 来更新与模型关联的参数。

    • 当从另一个 docplex.cp 方法调用 CpoModel.add() 时,修复错误的源位置(不在真实模型源中)。

    • 当约束自动命名打开时(特别是对于refine_conflict(),searchPhases 不再包含在过程中。

    • 参数 mean_UB 和 mean_LB 现在在 standard_deviation() 中是可选的

    • CpoModel.add() 检查添加的表达式是否仅限于约束、布尔、目标或搜索阶段。

    • 在 modeler.py 中添加记录的函数 slope_piecewise_linear() 和 coordinate__piecewise_linear()。

    • 删除参数 TimeLimit 和 Workers 的默认配置设置。

2.5.92(2018.03)更改:

  • docplex.cli获得新功能:
    • 选项--details将显示在 DOcplexcloud 上发布的求解详细信息。

    • 选项--url-key允许在不使用配置文件的情况下指定凭据。

  • docplex.cp 中
    • 修复 min() 和 max() 不支持可选键的问题。

    • 添加一个能够读取 Minizinc Challenge 问题的 Flatzinc 解析器。

    • 将表达式依赖关系分析从模型转移到编译器端。

    • 不再有约束模型表达式具有唯一名称。编译器在需要时重新分配私有名称。

    • 现在允许具有相同公共名称的多个变量或表达式。

    • 将方法 CpoModel.get_expression() 替换为 CpoModel.get_named_expressions_dict()。

    • 使 SolverProgressPanelListener 在 Python 2 中正常工作

    • 使用 SolverProgressPanelListener 时,Solve 会自动设置为开始/下一个循环。

    • 在 CpoModel 中,添加一个允许在整个模型中用另一个函数替换一个函数的方法。

    • 覆盖方法 __bool__ 以避免意外将 CPO 表达式用作 Python 布尔值。

    • 添加特殊情况以搜索本地 CP Optimizer Interactive 可执行文件。

    • 允许方法 min()、max()、min_of() 和 max_of() 支持可变数量的参数。

    • 允许方法 all_diff() 支持可变数量的参数。

    • 不推荐使用上下文参数“length_for_rename”。仅使用 length_for_alias。

    • 在 CpoModelSolution 中添加方法 add_var() 作为 add_integer_var_solution() 和 add_interval_var_solution() 的快捷方式

    • 覆盖 CpoModelSolution 中的方法 __contains__() 以轻松验证给定变量的解决方案是否在解决方案中。

    • 在模型上调用时,export_model() 和 get_cpo_string() 会禁用所有模型优化选项。

在 2.4.61 (2017.11) 中更改:

  • docplex.mp和docplex.cp_
    • 支持 CPLEX 引擎 12.8。docplex2.4 的某些功能仅适用于引擎 >= 12.8。

    • 添加新端口(AIX、plinux)。

    • 示例现在以 Zeppelin 笔记本的形式提供。

  • docplex.mp 中
    • 通过提供 numpy、pandas 或 scipy 矩阵将线性问题表达为 scikit-learn 转换器。

    • 逻辑约束:约束等价,if-then & rshift 运算符。

    • 元约束:允许在表达式中使用离散线性约束,使用它们的真值。

    • 解决挂钩以添加要在每个中间解决方案处调用的方法。

    • 如果在 docplexcloud python worker 上运行,KPIS 会在每个中间解决方案上自动发布。

    • 支持 scipy coo 和 csr 矩阵。

    • 修复了传递字符串而不是字符串列表时 Model.add_constraints() 中的错误。

  • docplex.cp 中
    • 添加新方法 run_seeds() 以多次执行模型,本地求解器 12.8 可用。

    • 添加对新求解器信息“SearchStatus”和“SearchStopCause”的支持。

    • 在方法docplex.cp.model.CpoModel.propagate()中,添加向模型添加可选约束的可能性。

    • 在整数变量和整数变量解决方案中添加域迭代器,允许将域作为单个整数的列表。

    • 添加将某些模型变量识别为模型 KPI 的可能性。

    • 在求解器上添加 abort_search() 方法(并非所有地方都支持)

    • 返工代码生成以增强性能并删除已删除表达式所指向的未使用变量。

    • 添加一个或多个 CpoSolverListener 以在求解开始、结束或找到解决方案时放置一些回调函数的可能性。在新的 python 模块docplex.cp.solver.solver_listener中提供了实现,该模块还包含示例侦听器 SolverProgressPanelListener 和 AutoStopListener。

    • 使用参数context.solver.solve_with_start_next,启用 solve() 方法以执行开始/下一个循环而不是标准求解。对于优化问题,这使得 SolveListeners 的使用具有更高的进度准确性。

    • 完全删除已弃用的“天使”以识别本地求解器。

    • 不赞成在docplex.cp.CpoModel上使用方法minimize()和minimize( )

    • 在解决方案对象中添加方法get_objective_bounds()get_objective_gaps() 。

在 2.3.44 (2017.09) 中更改:

  • 模块docplex.cp.model.solver_angel.py已重命名为solver_local.py。仍存在具有先前名称的卷影副本以保持升序兼容性。模块docplex.cp.model.config.py被修改为引用这个新模块。

  • docplex.cp.model.solver_local.SolverAngel已重命名为SolverLocal。仍存在具有先前名称的卷影副本以保持升序兼容性。

  • docplex.cp.model.solver_local.AngelException已重命名为LocalSolverException。仍存在具有先前名称的卷影副本以保持升序兼容性。

  • 函数logical_and() 和logical_or() 能够接受模型布尔表达式列表。

  • 修复 allowed_assignments() 和 forbiden_assignments() 错误地将元组列表转换为元组集的缺陷。

  • 更新所有示例以添加注释并将它们拆分为数据/准备/模型/解决部分

  • 添加从 JSON 文件而不是原始数据文件读取数据的新 sched_RCPSPMM_json.py 示例。

  • 用更明确的名称重命名所有 visu 示例。

  • 移除对象类 CpoTupleSet。只能通过调用 tuple_set() 方法来构造元组集,或者更简单地,在需要元组集时(在表达式 allowed_assignments() 和禁止分配中)直接传递 Python 可迭代的可迭代对象

  • 允许logical_and() 和logical_or() 接受布尔表达式列表。

  • 添加内置函数 all() 和 any() 的重载作为logical_and() 和logical_or() 的其他形式。

  • 在 no_overlap() 和 state_function() 中,转换矩阵可以直接作为整数迭代的 Python 迭代传递,

  • 不推荐使用仅使用大小创建的可编辑转换矩阵。但是,它仍可用于升序兼容性。

  • 添加 conditional() 建模函数

  • 不推荐使用参数“AutomaticReplay”。

  • 在对象 CpoSolveResult 上添加 get_search_status() 和 get_stop_cause(),可用于求解器 COS12.8

  • 提高了 docplex.mp 中Var.reduced_cost ()的性能。

在 2.2.34 (2017.07) 中更改:

  • 添加了方法docplex.cp.model.export_model()docplex.cp.model.import_model() 以分别生成或解析 CPO 格式的模型。

  • 添加了方法docplex.cp.model.minimize()docplex.cp.model.maximize() 以直接指示模型级别的目标。

  • 笔记本示例scheduling_tuto.ipynb包含一个广泛的教程,用于解决 CP 的调度问题。

  • 建模方法 sum() 现在支持累积表达式的总和。

  • 方法docplex.cp.model.start_search()允许直接从模型对象开始新的搜索序列。

  • 设置context.solver.auto_publish并使用 CPLEX 引擎时,在 DOcplexcloud Python worker 上运行脚本时会自动发布 KPI 和当前目标。

  • 设置context.solver.auto_publish并使用 CP 引擎时,当脚本在 DOcplexcloud Python worker 上运行时会自动发布当前目标。

  • 添加了docplex.util.environment.Environment.set_stop_callbackdocplex.util.environment.Environment.get_stop_callback,以便您可以在 DOcplexcloud 作业中止时添加回调。

在 2.1.28 中更改:

  • 新方法Model.logical_or()Model.logical_and()处理二进制变量的逻辑运算。

  • DOcplex 现在支持 CPLEX 12.7.1 和 Benders 分解。使用benders_annotation属性设置约束和变量的注释,并使用管理 Benders 分解的正确 CPLEX 参数。

  • CPLEX 教程:在文档中和作为示例中的笔记本。

  • 修复了使用 unicode 变量名称时docplex.mp.solution.SolveSolution.display()docplex.mp.solution.Model.report_kpi( ) 中的错误。

  • DOcplexcloud 现在有一个简单的命令行界面。它可以在终端中运行。python -m docplex.cli 帮助以获取更多信息。该命令行在您的 cplex_config.py 文件中读取您的 DOcplexcloud 凭据。它允许您在 DOcplexcloud 上提交、列出、删除作业。cli 也可以在笔记本中使用,使用%docplex_cli魔法。%docplex_cli help以获得一些帮助。在笔记本中,可以使用%docplex_url%docplex_key魔法传递凭据。

  • 在 1 次调用中移除约束

  • 编辑现有模型时的错误修复。

  • 修复了使用 docplexcloud 时松弛机制中的错误。

在 2.0.15 中更改:

  • 现在支持分段线性 (PWL) 函数。现在docplex.mp.model上提供了一个 API,用于创建 PWL 函数并使用这些 PWL 函数创建约束。可以使用断点(默认 API)或使用斜率来定义 PWL 函数。一些简单的算术也可用于通过添加、减去或缩放现有 PWL 函数来构建新的 PWL 函数。

  • DOcplex 经历了重大的改革工作,使建模运行时性能平均提高了 30-50%。API 的所有部分都受益于性能改进:变量和约束的创建、约束的删除、变量总和的计算等等。

  • 约束现在是完全可编辑的:可以修改约束的表达式。同样,也可以修改客观表达式。这允许复杂的工作流程,其中模型在求解后修改,然后再次求解。

  • docplex 现在可以在 Anaconda 云上使用,并且可以通过 conda 安装打包程序进行安装。请参阅 Anaconda Cloud 上还提供了适用于 Python的IBM Anaconda home CPLEX Community Edition,以获取有限制的免费本地求解功能。

  • 现在放弃对docplex.mp.context.Context~/.docplexrc配置文件的支持。自 1.0.0 起,此功能已被弃用。

  • 已知不兼容:类docplex.mp.model.AbstractModel移至docplex.mp.absmodel.AbstractModel。使用此类的示例已更新。

在 1.0.630 中更改:

  • 添加了对 CPLEX 12.7 和 Python 3.5 的支持。

  • 将 DOcplexcloud 客户端升级到版本 1.0.202。

  • 现在正式支持模块docplex.mp.advmodel 。该模块为大型模型的高效、专用聚合器方法提供支持。

  • 在 DOcplexcloud 上求解时,现在可以使用 context.solver.docloud.proxies属性指定代理。

  • 当使用相同名称定义两个约束时,发出警告而不是致命异常。定义的最后一个约束将接管名称目录中的第一个约束。

  • 将 pandas DataFrame 作为变量键(使用 DataFrame 索引)传递时修复 ValueError。

  • Solution.get_values() 在一次调用中返回一组变量值。

  • docplex.mp.model不再导入docloud.status。以前初始化为JobSolveStatus.UNKNOWN的任何状态现在都初始化为 None

  • 对笔记本和示例的小幅改进。