有人看过JavaScript/Node.js的单纯形库吗?

8

我已经用NodeJs编写了很多脚本,但是我需要使用类似GLPK库来处理脚本中的一些优化问题。有人听说过JavaScript驱动程序吗?我想知道将coin移植到V8库会有多难...可能超出了我的工资级别。

4个回答

7

我不确定这是否是原帖作者正在寻找的,但我正在 这里 开发一个可能适用的东西。你可以像这样使用它:

var solver = new Solver,
    results,
    model = {
    optimize: "profit",
    opType: "max",
    constraints: {
        "Costa Rican" : {max: 200},
        "Etheopian": {max: 330}
    },
    variables: {
        "Yusip": {"Costa Rican" : 0.5, "Etheopian": 0.5, profit: 3.5},
        "Exotic": {"Costa Rican" : 0.25, "Etheopian": 0.75, profit: 4}
    }
};

results = solver.solve(model);
console.log(results);

最终结果会是:

{feasible: true, Yusip: 270, Exotic: 260, result: 1985}

它可能不是世界上最快的求解器,但它足够易于使用。


5
JavaScript单纯形法库

YASMIJ示例:

var input = {
    type: "maximize",
    objective : "x1 + 2x2 - x3",
    constraints : [
        "2x1 + x2 + x3 <= 14",
        "4x1 + 2x2 + 3x3 <= 28",
        "2x1 + 5x2 + 5x3 <= 30"
    ]
};
YASMIJ.solve( input ).toString();
// returns
"{"result":{"slack1":0,"slack2":0,"slack3":0,"x1":5,"x2":4,"x3":0,"z":13}}"

5
很遗憾,我已经尝试了所有这些东西,但它们都是垃圾。 SimplexJS 是用于混合线性规划的(实际上并没有实现单纯形法,似乎只是为了好玩选择了这个名字)。 SimpleSimplex 在代码中使用了 document.write,这不是您将在另一个项目中使用的内容,它只是一个演示。 YASMIJ.js 从未退出 beta 版本,并将目标函数作为字符串传递,这不是一个好兆头... - Meekohi
3
有两种完全不同的优化算法都被称为“单纯形算法”:一个是线性规划优化问题,其中空间由单纯形边界限制,解点从顶点移动到顶点;另一个是 Nelder-Mead 单纯形算法,用于优化连续空间中任意函数,通过重复构建单纯形并估计单纯形内的积分来实现。这很容易让人感到困惑,并难以找到正确的实现方法。上面的例子是一个线性规划问题。 https://en.wikipedia.org/wiki/Simplex_algorithm - Max Murphy
请注意 - YASMIJ.js仅适用于最大化(类型:“maximize”)。此外,目前还不受支持 - 如说明中所述。 - Svetlana K
SimpleSimplex是一个Nelder Mead优化器,而不是线性规划求解器。 - Justin Meiners

2

2

我不知道这是否有帮助,但请看一下numericjs.com。这是一个我正在开发的JavaScript数值分析库,其中包含线性规划算法的基本实现。


3
numericsjs严重失修,自2012年以来没有更新。不建议使用。 - Meekohi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接