问题标签 [mathprog]

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 回答
95 浏览

linear-programming - 如何在 MathProg 中的所有行的总和的所有列上取最大值

我正在尝试解决一个优化问题,其中我尝试优化的变量位于矩阵中(销售人员 X 商店,如果该销售人员被分配到该商店,则变量为 1)。每个商店都有利润。

这就是我定义它的方式:

我现在尝试添加一个约束,即所有销售人员的利润总和的最大值大于某个数字。这就是我制定它的方式,但这似乎不起作用。

这可以做到吗?如果是这样,正确的语法是什么?

我才刚刚开始学习 MathProg,所以这有点令人困惑。

0 投票
1 回答
332 浏览

linear-programming - 在 GLPK 中对分段函数进行建模

我正在尝试使用 GLPK 来解决我有分段函数(2 个子函数)的优化问题。简而言之,问题在于通过调度某些(电气)设备的运行来最小化环境中的能源成本。还考虑了能量的产生,使我的目标函数成为以下函数的最小化:

目标函数

这个想法是,对于每个瞬间,balance[i]将存储整体能量平衡(即消耗的能量和产生的能量之间的差异)。因此,如果 balance[i]>= 0,则能源需求量超过生产量,我们需要从电网购买能源;否则,生产超过需求,我们可以将多余的能源出售给电网。

对于每个时刻,balance[i]的值将取决于能源生产、固定能源消耗(两者都是先前已知的,因此不涉及问题变量)和预定设备的能源消耗(作为问题变量的函数计算)。

在尝试在 GLPK 中对此进行建模时,我引入了一个二进制变量,对于每个瞬间 i,它都会告诉balance[i]的信号。这个想法是将目标函数写为:

最小化 obj: sum {i in k} (z[i]*balance[i]*buy + (1-z[i])*balance[i]*sell)

因此,我希望当 balance[i]>= 0 时 z[i] 为 1,否则 z[i] 为 0(balance[i] < 0)。

如何定义 z[i] 的约束?我知道可以在 GLPK 中定义条件约束,但据我所知我不能写:

st zUpperi{i in k: balance[i] >= 0}: z[i] = 1;

因为 balance[i] 取决于问题变量......还有其他表达这个约束的方法吗?或者这在 GLPK 中甚至是不可能的?

0 投票
0 回答
81 浏览

optimization - 如何使用 MathProg (GLPK) 或其 API 实现极小极大组合优化问题

概貌

我正在尝试实施一个程序(在本文第 5.1 节中描述)。
给定一个建模为有向无环图 (DAG) 的计算机网络,我有一些初始节点(假设是攻击者的起点)和一个称为目标节点的节点(终点,攻击者目标),我为此计算被破坏的概率(由攻击者)。

一旦我有了这个概率,给定一组可接受的目标节点后代,我想在这条路径中找到一个(或多个)改进节点的最佳位置,以使目标节点概率更低(实际上是最小化)。

所有这些都被描述为一个极小极大问题,其中内部最大化问题的结果(目标被攻击的概率)然后用于外部最小化问题。后者是一个组合问题。
整个过程是用 Java 实现的,但这里感兴趣的部分是在 MathProg 中使用 GLPK 求解器完成的。
提供了第一部分的源代码。描述了第二部分,但没有可用的代码。因此我的问题变成了:

你能帮我在 MathProg(或 GLPK 的 JAVA API)中建模组合最小化问题吗?

请参阅此问题的[最小化部分]以获得深思熟虑的解释和我的尝试。

我对 MathProg 的经验为零,对优化算法的经验也不多。我很高兴听到有关如何为求解器设置此模型的提示,最好使用用于 GLPK 的 MathProg 和/或集成这两个部分的 Java(非排他性)。

最大化部分

在这一部分中,我获得了最大化的目标节点概率,这是使用 SLP 和 GLPK 解决的最大化问题的结果(这个问题的多次迭代直到一个静止点,这是在 Java 中完成的)。

问题描述:

max_prob

f(T,x,y) 约束是某种产生您在示例中看到的约束的类型(我们现在可以省略它的描述)。

下面是这个问题的 LP 建模的 MathProg 中的一个示例,用于 10 个节点的图:

最小化部分

最小化包括通过找到位于目标节点的后代集中的一个或多个“改进节点”的组合来最小化目标的节点妥协概率(与前一部分中最大化的相同)。

令 Na 为可改进节点的数量(j_1 < j_2 < ... < j_Na,节点)。定义 0-1 个变量 t_j_i for i=1,..,Na with T = (t_j_1, ...,
t_j_Na
) :
min_prob

其中 x_g 是解决方案

max_prb_2

其中 f(x,y) 包含 T。如果 T 的第 t_j 个对应元素 = 1,则“改进”目标节点的后代集中的第 j 个节点,从而降低目标节点的妥协概率.

从cond中放松可以概括为多项改进。

我的尝试

输出:

错误: test.m:42:t8 MathProg 模型处理错误
没有值

0 投票
1 回答
47 浏览

linear-programming - 如何解决 mathprog 中的域外错误?

H = 1..24;st ElectBattery{h in H}: ES[h]-ES[h-1]-P2S[h]*Efi['ESt']+PGEN['ESt',h]==0;

错误:ES[0] 超出域

0 投票
2 回答
443 浏览

linear-programming - 在线性规划中使用索引进行优化

我遇到了几个优化问题,涉及识别向量中的一个或多个索引以最大化或最小化成本。有没有办法在线性规划中识别这些索引?我对 、 、 或任何其他 API 中的解决方案持mathprog开放CVXR态度CVXPY

例如,对于变化点问题(找到函数发生变化的索引)需要确定一个索引,对旅行商问题(在累积距离 Y 之前访问城市 X)施加距离约束。

举个简单的例子,假设我们想要识别向量中任一侧的和最相等(它们的差最小)的位置。在此示例中,解决方案是索引 5:

尝试 1

使用CVXR,我尝试声明split_index并将其用作索引(例如,x[1:split]):

1:split_indexNA/NaN argument.

尝试 2

声明一个显式索引向量 ( indices) 并进行元素逻辑测试是否split_index <= indices. 然后将该二进制向量逐元素乘以x选择分割的一侧或另一侧:

x * is_firstnon-numeric argument to binary operator. 我怀疑这个错误的出现是因为is_first现在是一个IneqConstraint对象。

0 投票
1 回答
513 浏览

glpk - 线性形式的乘法不允许错误

我正在尝试解决设施位置问题。这是我的代码:

当我运行此.mod文件时,我收到以下错误:

这里 x 是设施“i”为客户“j”提供的部分需求。

我从提到的行中删除了 y[i] 并且错误消失了。但是如果我这样做,我会得到相同的乘法错误,但这次是c1受限的。

什么是正确的方法?谢谢你。

0 投票
1 回答
73 浏览

linear-programming - 如何在 GPL 线性规划 (Gusek) 中将变量绑定为负数?

我是线性规划的新手,我很难找到一个简单问题的解决方案。

我在 pragramme Gusek 中使用了 GPL 语言。我的问题是变量最初总是大于 0,但我需要一个 -inf<x3<=0 界限。我实际上已经尝试了所有方法,但我还没有看到任何解决这个问题的方法。

问题看起来像:

“边界”语法实际上不起作用。我的意思是,就我所知,这不是一个有效的语法,但正如我所说,我是这个领域的新手。这个问题很容易用手解决,我知道,但我希望能够解决更大规模的类似问题。

提前谢谢

0 投票
1 回答
75 浏览

linear-programming - 在 GNU Mathprog/AMPL 中实现基于先前变量值的约束

我有一个二进制程序,我的一个变量x_it在两个集合上定义,beingI: Set of objectsT: Set of the weeks of the year,因此x_it是一个二进制变量,表示 object 是否i在 week 被分配给某物t。我在 AMPL/GNU Mathprog 中未能实现的约束是如果x_it等于1thenx_i(t+1)并且x_i(t+2)也应该取1. 有没有办法用简单的数学编程语言来实现这个约束?

0 投票
0 回答
27 浏览

gnu - GLPK #glpsol #TSP #读取数据

我正在尝试为 TSP 和数据制定模型,我在数据部分有一个单独的数据文件。

在模型中,我应该编写哪个命令或脚本来从文件中读取数据?

我使用的语言是 GPL。

0 投票
0 回答
19 浏览

gmp - 如何在 GMP c++ 库中查找使用 mpf_div 计算的结果的精度?

我是GMP库的新学习者。如何找到以下任何一项:

  1. 如何获得结果的精度
  2. 如何计算结果的总位数。