首页 > 解决方案 > 为什么 runkit.com 代码返回的值与本地代码不同?

问题描述

我仔细检查了相同的 Node.js 版本v12.10.0、相同的 npm 包版本 ( javascript-lp-solver 0.4.5)、相同的输入,我们得到了不同的结果。

方案 A


方案 B

var formulador = require("./src/solver.js");

var modelo = {
  optimize: "custo",
  opType: "min",
  constraints: {
    N: {
      min: 18000.0,
      max: 18800.0
    },
    PCNA: {
      min: 5000.0,
      max: 5800.0
    },
    K: {
      min: 24000.0,
      max: 24800.0
    },
    "I::100268_100328": {
      max: 1.0
    },
    "I::100268_100328_D1": {
      min: 0.0
    },
    "I::100268_100328_D2": {
      min: 0.0
    },
    peso: {
      equal: 1000.0
    }
  },
  variables: {
    "100194": {
      CA: 12.0,
      S: 1.5,
      MG: 6.0,
      peso: 1.0,
      custo: 446.19,
      preco: 446.19
    },
    "100249": {
      K: 60.0,
      peso: 1.0,
      custo: 1964.49,
      preco: 1964.49
    },
    "100268": {
      PCNA: 21.0,
      CA: 18.0,
      S: 10.0,
      PH2O: 16.0,
      peso: 1.0,
      custo: 1192.33,
      preco: 1192.33,
      "I::100268_100328_D1": 1.0,
      "I::100268_100328_D2": -1.0
    },
    "100287": {
      N: 3.0,
      PCNA: 17.0,
      CA: 16.0,
      S: 11.0,
      peso: 1.0,
      custo: 1444.68,
      preco: 1444.68
    },
    "100302": {
      N: 11.0,
      PCNA: 52.0,
      PH2O: 44.0,
      peso: 1.0,
      custo: 2537.45,
      preco: 2537.45
    },
    "100328": {
      N: 34.0,
      peso: 1.0,
      custo: 1428.98,
      preco: 1428.98,
      "I::100268_100328_D1": 1.0,
      "I::100268_100328_D2": -1.0
    },
    D100268: {
      "I::100268_100328_D1": -1.0,
      "I::100268_100328": 1.0,
      "I::100268_100328_D2": 1000.0
    },
    D100328: {
      "I::100268_100328_D1": -1.0,
      "I::100268_100328": 1.0,
      "I::100268_100328_D2": 1000.0
    }
  },
  ints: {
    "100194": 1,
    "100249": 1,
    "100268": 1,
    "100287": 1,
    "100302": 1,
    "100328": 1
  },
  binaries: {
    D100268: 1,
    D100328: 1
  }
};

var resultado = formulador.Solve(modelo);
console.table(resultado);

注意是同一个输入


场景 A中,结果是

┌──────────┬────────────┐
│ (index)  │   Values   │
├──────────┼────────────┤
│  100194  │     4      │
│  100249  │    400     │
│  100268  │     -0     │
│  100287  │     1      │
│  100302  │     96     │
│  100328  │    499     │
│ feasible │    true    │
│  result  │ 1745681.66 │
│ bounded  │    true    │
│ D100268  │     1      │
└──────────┴────────────┘

场景 B中,结果是:

┌──────────┬────────────┐
│ (index)  │   Values   │
├──────────┼────────────┤
│  100194  │     3      │
│  100249  │    400     │
│  100268  │     3      │
│  100302  │     95     │
│  100328  │    499     │
│ feasible │    true    │
│  result  │ 1744830.33 │
│ bounded  │    true    │
│ D100268  │     1      │
└──────────┴────────────┘

那么,为什么会出现这种情况?我需要来自 runkit.com 的返回与本地代码相同。

标签: javascriptrunkit.com

解决方案


终于发现:Github 存储库没有发布版本0.4.5,并且 Github 中可用的当前代码不包含作为 version 传递给 npm 的一些更改0.4.5。为你感到羞耻,为你感到羞耻......

我是怎么知道的?我使用版本中的 npm 包创建了一个 Node.js 项目,0.4.5并使用了相同的数据条目。结果与预期的一样,与在 runkit.com 上获得的结果相同。因此,我将 node_modules(来自 npm 包)和 jsLPSolver(来自 Github)文件夹的内容与 WinMerge 进行了比较,他向我指出了存在差异的文件。

实现从 Github 获得的代码中的差异,一切都变得清晰起来,并回到了相同的解决方案。


推荐阅读