问题标签 [operations-research]

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 投票
0 回答
136 浏览

math - 根据数量对不同供应商进行成本优化

我正在尝试根据供应商对一种产品的成本来优化最低成本。

第一个限制是价格因成本而异,因此在第一个供应商处,如果您购买 1<=x<5,则价格为 107,如果 x>=5,则价格为 90。

另一个限制是,如果成本是相同的 BodeBrown>Bil Bil> Homebrewer (我不知道如何实现它,也许将一个微不足道的数字加到指定的成本中)

每个生产周期都有需求。

桌子

我尝试使用二进制文件排除每个供应商的一个价格,制作 OR 逻辑。例如:x1+x2<=1。并制作一个目标函数,如最小化 z: 107*x1+90*x2+100*x3+96*x4+105*x5+90*x6 with var xi>=0, binary;

但是,我无法用二进制实现需求。

如果有人可以给我一些提示,请。提前致谢

ps.:我在Gusek上学习LP,但我也安装了solverstudio

编辑2:

我提出了这个解决方案:解决方案

在 LINGO 上解决了,感谢 Erwin!

好吧,程序很乱,但它只是为了学习,用公式可以进行通用编程并解决更大的问题。

0 投票
1 回答
314 浏览

r - 马尔可夫链调整初始状态向量以求解所需向量元素

我试图在每个步骤中增加离散马尔可夫链中的初始状态向量,以便在未来某个时间点求解状态向量元素,这似乎很麻烦。

举个简单的例子,假设一家公司有一个初始状态向量,它由具有 3 个过渡状态(入门级、晋升、离职公司)的入门级员工组成。具有 1000 名入门级员工的初始状态向量定义为:

剩余入门级别、升职或离开公司的转换矩阵由下式给出:

两次迭代后:

(剩余 500 名入门级员工)

(剩余 250 名入门级员工)

之后step2state,我还有 250 名入门级员工,但假设我希望在第 1 步之后有 1,300 名入门级员工,在第 2 步之后需要 2,000 名入门级员工。为此,我通过增加状态向量来雇用更多员工。现在这变成了一个繁琐的过程,我在步骤 1 中增加initialstate矩阵以考虑新员工,在步骤 2 中观察入门级员工的数量,然后增加step1state以实现步骤 2 的目标。

例如,在运行之前的马尔可夫链之后,我再次运行它并在步骤 1 中添加 800 名新员工:

根据需要,第 1 步有 1,300 名入门级员工,但第 2 步现在需要雇用 1,350 名入门级员工(从最初的 1,750 名减少)。以下满足我在每个时期的招聘目标:

如果我的入门级员工目标在任何一步发生变化,我必须在之后的每一步都重新运行马尔可夫链,因为入门级员工的数量取决于前几期的员工数量(但转移概率不会)。R 中的 MarkovChain 包似乎无法解决每个步骤中特定值的状态向量,所以我只是运行基线 Markov Chain 并迭代地将新员工添加到每个初始状态向量以获得我想要的目标每一步。

有一个更好的方法吗?马尔可夫链是我想要实现的模型的正确选择吗?

0 投票
2 回答
3110 浏览

data-structures - 有向无环图可以有多个父项和多个根吗?

DAG 可以有多个父级和/或多个根吗?

0 投票
1 回答
714 浏览

optimization - 使用线性规划制定算法以均匀分配交货数量

我正在尝试使用优化和线性规划来解决供应链问题。

我不是优化专家,我在使用变量、约束和目标制定解决方案时遇到了麻烦。

这只是一个概念证明,我已经尝试过 Microsoft Solver Foundation 和 Optano 来创建演示。

我需要将产品交付给客户。我在固定的日子交货。我需要确保客户的货架上每天有最低约定的库存水平。

客户每周进行一次库存检查,并告诉我每周每种产品的起始库存水平。每种产品的平均每日使用量是一个已知参数。

到目前为止,一切都很好。我有一个解决方案。下一个要求是我卡住的地方。

出于后勤原因,供应商希望每次交付的产品总量大致相同。

在特殊的日子里,库存水平可能会低于通常商定的库存水平。至少它必须是平均每日使用量,并且到周末交付的总量必须是该周商定的库存水平。

根据我读过的文章和探索过的例子,我尝试了许多实验。我还没有找到一种方法来制定约束和目标来解决平均分配每天交付的数量的要求。

我想这是一个相当普遍的供应链问题,我真的(真的)会很感激一些指导吗?

更新: 这是使用 Microsoft Solver Foundation(求解器服务 API)的基本实现。我与无国界医生无关。它计算每天交付的数量和每天结束时货架上的预期库存量。

我希望这能为我的问题提供更多背景信息。

0 投票
1 回答
1180 浏览

python - 使用 PULP 在线性规划优化中添加约束

以下代码为我提供了保持低成本的最佳去处:

样本数据集:

我在数据集中添加了一个额外的字段“位置”。

我想要实现的是,如果求解器给我三个 3 个位置作为最佳解决方案,那么它必须使用位置坐标确保两个连续建议的城市之间的最大曼哈顿距离不大于 3000?

示例:如果求解器建议优胜美地、犹他州和俄克拉荷马州。那么在建议它们之前,它必须检查从优胜美地到犹他州的距离低于 3000,而犹他州到俄克拉荷马州的距离低于 3000。

这也使它成为路由问题。

那么如何添加一个约束,使用位置坐标将两个连续建议城市之间的距离保持在 3000 以下。请帮忙

谢谢!!!!

0 投票
1 回答
514 浏览

c++ - 模拟退火:速度太慢,结果不佳

由于模拟退火方法,我正在尝试解决以下问题:

优化问题

我已经将 c_i,j,f 值存储在一维数组中,所以

我的模拟退火函数如下所示:

过程 Permutation(int permutation[], n) 用 [[0,n-1]] 的随机排列填充数组排列(例如,它会将 [0,1,2,3,4] 转换为 [ 3,0,4,2,1])。

问题是,1000000 次迭代需要太多时间,并且目标函数的值在 78 - 79 之间波动,而我应该得到 0 作为解决方案。

我还想在复杂性方面我可以做得更好......有人可以帮助我吗?

提前致谢!

0 投票
1 回答
22 浏览

security - 我正在根据攻击的严重性和攻击者的技能或知识开发风险分析指标

我正在研究一个攻击模式数据库,该数据库具有各种属性,例如攻击的严重性、攻击者技能、攻击可能性,所有这些属性都以高、中和低等值的形式出现。我想开发一个基于这些属性的风险分析指标。我应该将低到 1 中到 2 和高到 3 或使用其他一些归一化技术

0 投票
1 回答
1421 浏览

nodes - 如何使用协和飞机解决 TSP?

我有 12 个节点和每对节点之间的距离(以米为单位)。节点指的是一个城市的不同街道。我需要获得 TSP 的精确解(非启发式),所以我想用 Concorde 程序解决 TSP 问题,但我无法引入数据。Concorde 界面只是让我引入随机节点并解决该问题,但我想给它我的数据。

我试图创建一个具有以下结构的 .txt:

并将扩展名更改为 .qs (我已经看到协和飞机接受了这一点),但我没有得到任何结果。我还设置了扩展名 .tsp ,什么都没有。

另外,我在谷歌地图中搜索了节点的坐标,并创建了文本文件:

但同样,协和飞机不接受我的文件。我究竟做错了什么?我应该如何在 Concorde 中引入我的数据?

此外,我尝试在 NEOS 服务器中为协和飞机引入最后一个坐标文件,结果不是预期的,如图所示: TSP

0 投票
1 回答
508 浏览

scheduling - 使用整数规划安排工作班次——如何制定可行的约束?

我正在尝试安排 30 名助教来完成大约 118 小时的办公时间。一天中不同时间的办公时间需要不同的覆盖范围(0、1、2 或 3 名助理)。人们被安排在半小时。

我已经制作了一个整数线性程序,这样我就有一个由 worker 和 shift 索引的 0/1 变量:如果不工作则为 0,如果工作则为 1。覆盖很容易,但它导致一些工人只安排半小时轮班,这对他们来说是不公平的。

我的第二次尝试是拥有一组更丰富的索引变量,按(工人、开始时间、轮班长度)。这是障碍开始的地方:

  • 如果我将每个工人的轮班次数限制为每天一班,那么 IP 求解器会持续数小时而没有解决方案。

  • 如果我允许每个工人每天两班倒,那么一切都会很好,除了有时求解器会安排一个工人轮班进行两个重叠的班次。这意味着求解器认为我有 3 个值班人员,但我实际上只有 2 个。

  • 我最后的尝试是引入约束,以使任何工人都不能安排重叠的两个班次。在这一点上,我的工具研磨了一段时间,然后因内存不足错误而崩溃。

我正在使用带有 COIN CPB 求解器的RIMA优化包。(也试过了lpsolve。)

我觉得 30 名工人进入大约 150 个插槽应该不难!所以我想我一定是在以一种愚蠢的方式提出问题。因此我的问题是:我如何学习如何以求解者能够很好地解决问题的方式来制定我的调度问题?

(如果重要的话,我试图最大化的目标函数是所有工人在他们被分配的所有班次中的总效用。它只是一个由工人和班次索引的数字。)

0 投票
1 回答
120 浏览

algorithm - 整数子集链接的优化算法

考虑将两组整数值划分为多个子集。这两组存在相同的一组值,但顺序和划分为子集不同。这个想法是将来自第一组的子集与来自第二组的子集链接起来,这样第一组的每个子集中的每个单独的值都链接到第二组的子集的相同单独的值。任何价值都不能与另外两个联系起来。在一个链接步骤中,可以在第一组的仅一个子集与第二组的仅一个子集之间链接多个值。目标是尽可能减少链接步骤的数量。

问题是:是否有算法可以尽可能优化这种链接?

我在线性规划、整数规划、组合优化和运筹学等数学优化的几个领域做了一些研究,但似乎没有一个算法能涵盖这个问题。你们有什么想法、领域或算法来优化这些问题并让我朝着正确的方向前进吗?

例如:

具有两个子集的两组整数:

[[1, 2, 2] [2, 3, 3]]

[[1, 2, 3] [2, 2, 3]]。

现在,第一个链接集可以将第一个集 1[1] 的第一个子集与第二个集 2[1] 的第一个子集链接起来。

这是一个步骤,导致 1 - 1 - 1 和 2 - 1 - 1 之间的链接以及 1 - 1 - 2 和 2 - 1 - 2 之间的链接。现在集合将如下所示:

[[ 1, 2 , 2] [2, 3, 3]]

[[ 1, 2 , 3] [2, 2, 3]]。

下一步可能是将 1[1] 与 2[2] 链接,从而导致 1 - 1 - 3 和 2 - 2 - 1 之间的链接,集合将如下所示:

[[ 1, 2, 2 ] [2, 3, 3]]

[[ 1, 2 , 3] [ 2 , 2, 3]]。

第三步可能是将 1[2] 与 2[1] 链接。导致:

[[ 1, 2, 2 ] [2, 3 , 3]]

[[ 1、2、3 ] [ 2、2、3 ]]。

然后第四步可以将 1[2] 链接到 2[2]。导致:

[[ 1, 2, 2 ] [ 2, 3, 3 ]]

[[ 1, 2, 3 ] [ 2, 2, 3 ]],这意味着每个值都是链接的。该解决方案需要四个步骤。

当有更大的集合时,所有子集都可以链接到另一个集合的所有其他子集,但这会导致很多步骤。是否有一种算法可以优化步数?