问题标签 [mixed-integer-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
139 浏览

python-3.x - 优化中的顺序约束

我有一组许多(10000 多个)项目,我必须从中选择 20 个项目。我只能选择每个项目一次。我的项目有利润和成本,以及几个布尔属性(例如颜色)。我需要按特定顺序输出结果:特别是我需要第一项和第三项为蓝色,第二项和第四项为红色。

每个项目都表示为一个元组:

举个例子

并且项目的总集是列表的列表:

我的利润和成本也是列表:

对于选择的每个项目,它需要有一个最小值,并且至少 5 个项目必须将属性 (is_blue) 标志设置为 1。

我想选择价值最高的 20 个最便宜的项目,其中 5 个的 is_blue 标志设置为 1,第一个和第三个项目是蓝色的(等等)。

我无法使用谷歌或工具来制定这个。

范围(MAX_ITEMS)]) >= 5)

我可以通过以下方式获得我选择的一组项目:

这很好用 - 它选择了 20 个项目,这些项目在成本限制的情况下最大化利润,但我坚持如何将其扩展到选择项目以保证第一个是蓝色等。

在制定约束和目标方面的任何帮助都会非常有帮助。谢谢!

0 投票
0 回答
99 浏览

r - 混合整数规划 R:与每个回归器相关的成本的最小绝对偏差

我遇到了一个问题,关于最小化绝对误差,这个问题被称为 LAD(最小绝对偏差),但是,由于每个回归量都是昂贵测试的结果和相关成本,所以应该避免使用不使用的回归量t 高度解释方差。它采用以下等式:

在此处输入图像描述

其中 N 是观察的总数,E 是与观察 i 相关的偏差,S 是独立变量的数量,lambda 是成本的惩罚系数,C 是与执行测试相关的成本。

到目前为止,我的方向和往常一样。为了使它成为线性的,我将绝对值转换为两个错误,e^+ 和 e^-,其中 e= y_i-(B_0+sum(B_j*X_ij) 和以下约束:

  • z_j ={0,1},关于回归量是否进入我的模型的二进制值。

  • B_i<=M_zj; B_i>=-M_zj

  • E^+, E^- >=0

我正在处理的数据的玩具子集具有以下结构:对于 y

对于回归者

而且为了成本

到目前为止,我的代码如下所示:

我知道 R 中有一个 LAD 函数,但是为了与我的同事以及一个非常烦人的博士导师保持一致,我必须lpSolve在 R 中执行此操作。我刚刚开始使用 R 进行该项目,但我没有确切地知道为什么这不会运行。语法或我的模型表述是否有问题。知道,我的主要问题是:

“矩阵中的错误(c(y,回归量,-回归量),c(-y,-回归量,回归量),:非数字矩阵范围”。

主要是,我打算让它创建所述加权 LAD 模型并让它返回不同的 lambda 值,从 0 到 1,步长为 0.1。

在此先感谢您对任何不便深表歉意,英语和 R 都不是我的母语。

0 投票
1 回答
745 浏览

matlab - Matlab中具有线性约束的混合整数二次规划调用Gurobi

我很难理解如何在 Matlab 中调用 Gurobi 来实现以下具有线性约束的 MIQP(混合整数二次规划)。

让我以示意图的方式解释我的设置。


(1) x未知数,它是一个大小为 的列向量225x1


(2)目标函数(应该最小化 wrto x)看起来像

在此处输入图像描述

可以重写为

在此处输入图像描述

当给出时,我有一个 Matlab 脚本计算alpha, Q,cQ,c稀疏) some_known_parameters1


(3)约束在中是线性的x,包括等式和不等式,写成形式在此处输入图像描述

当给出时,我有一个 Matlab 脚本计算Aeq,beq,Aineq,bineqAeq,Aineq稀疏) :some_known_parameters2


(4)的 某些组件x被限制在{0,1}中。我有一个 Matlab 脚本在给出时产生一串字母B(二进制),C(连续)some_known_parameters3


现在,我需要使用 Gurobi将(1)-(4)放在一起。我很难理解如何。我找到了这个例子,但对我来说它看起来很神秘。下面我报告一些我试图写的行,但它们不完整,我希望你能帮助完成它们。


问题:

(1)我不确定

我只是尝试使用此处提供的字母设置目标函数的矩阵,但它给了我错误。在我看来这里的例子

但是那我该如何设置alpha呢?是否因为它不会改变解决方案集而忽略它?

(2)我如何获得存储在矩阵中的输出只是目标函数的最小值而没有相应的x

0 投票
2 回答
486 浏览

matlab - 使用 Gurobi 运行 MIQP:如何提高时间性能?

我正在使用 Gurobi 在 Matlab 中运行具有线性约束的 MIQP(混合整数二次规划)。求解器非常慢,我希望您能帮助我了解我是否可以对此做点什么。

这些是我用来启动问题的行


这是 Matlab 窗口中输出的屏幕截图。在此处输入图像描述


问题 1:这是我第一次尝试运行 MIQP,我想听听您的建议,以了解我可以做些什么来提高性能。让我告诉我到目前为止我所做的尝试:

  • 我以强加的方式作弊params.MIPGap=10^(-1)。这样,节点探索的阶段就变短了。这样做有什么坏处?

  • 我有大 M 系数,我将它们绑定到最小的可能值。

  • 我试过设置params.ScaleFlag=2; params.ObjScale=2,但它让事情变慢

  • 我已经改变了params.method,但它似乎没有帮助(除非你有一些具体的建议)

  • 我有增加params.Threads ,但似乎没有帮助

问题 2(次要):为什么我在根单纯形日志中得到一个否定的目标?目标函数怎么可能是负数?

0 投票
1 回答
445 浏览

python - 在哪里可以找到 docplex 自动调优工具的文档?

我能够找到 CPLEX 自动调整工具的文档,即(IBM Studio),但我找不到 docplex 的文档(cplex python api)。python的调优工具是否存在?如果是,是否有任何文档可以使用此工具?预先感谢您的帮助。此致。

0 投票
1 回答
159 浏览

optimization - docplex 如何找到最佳界限?

我真的不明白 CPLEX 首先是如何计算最佳界限的。据我了解,CPLEX 需要探索所有节点以找到最佳界限或最大化或最小化所有可行解决方案的目标值。知道在大多数情况下探索所有节点是不可行的,CPLEX 如何首先找到这个最佳界限?对论文或文件的任何参考表示赞赏。先感谢您。

0 投票
2 回答
156 浏览

cplex - IloCplex::Param::MIP::Display 参数是否会限制显示的与修复奇点和 Markowitz 容差相关的信息?

我以后提到的警告如下;修复基础奇点,添加到 1 列超基础列表,并将 Markowitz 阈值设置为 0.3。

将在 2(默认)和 5 之间切换 IloCplex::Param::MIP::Display 参数值分别关闭和打开日志文件中上述警告的显示。假设上述问题出现在分枝定界树内部的 LP 子问题中。

0 投票
0 回答
258 浏览

cvxpy - 我正在尝试使用 cvxpy 最小化分段函数

我想最小化

我使用了拉格朗日乘数并重新表述了问题:

我使用了 cvxpy 和 ECOS_BB 求解器,但我得到“PRIMAL INFEASIBLE(在 feastol=8.8e-09 内)”。

谁能帮我打印求解器的第一次迭代解决方案以及关于如何克服不可行情况的任何评论。

0 投票
2 回答
3773 浏览

python - 具有 Python PuLP 性能问题的 MILP 模型 - 求解器非常慢

我最近一直在使用 Python 进行线性编程,并且我用 PuLP 创建了我的第一个优化算法。

我正在处理生产过程的调度问题。目标是通过为一天中的每个小时创建一个理想的生产计划来最小化每天的生产成本,并为一年中的所有日子创建此计划。

我遇到的问题是算法的执行需要很长时间(几个小时)并且经常卡住。另外,我感觉随着时间的推移它会变慢。

我希望获得有关如何提高代码性能的建议。

我解决问题的方法:

  • 定义我的最小化问题以创建一整天的最佳时间表。
  • 循环我的代码以在一年中的所有 365 天运行此优化。
  • 在每个循环结束时,我采用优化的当天生产计划并将其附加到数据框中,因此最后我有一个包含一年中所有日子的生产计划的数据框。

我正在处理 3 个生产资产(“a”、“l”和“o”),每个资产都有几种生产模式。我将每个资产模式组合定义为一个“选项”,总共有 14 个选项。每个选项每小时都可以变化,并且具有整数值(生产量)和二进制值(开/关),从而产生大约 14 x 2 x 24 = 672 个变量。该问题包含大约 1250 个约束。

我的代码有 200 多行,所以我有点犹豫要在这里分享所有代码,但我将在下面分享最重要的部分。

定义供应选项:

变量:

目标函数:

约束:

0 投票
1 回答
82 浏览

python - 混合整数将岛屿连接在一起或连接到终端

我正在尝试使用 MIP 使用纸浆包将岛屿连接在一起或连接到终端。所需的解决方案是找到系统中的最小距离。

下面的 MIP 代码结果显示,最小距离是将所有岛屿连接到终端,尽管岛屿与终端之间的距离明显很高。代码应该将一些岛屿连接在一起。

我究竟做错了什么 ?感谢您的支持。