javascript - 为什么 runkit.com 代码返回的值与本地代码不同?
问题描述
我仔细检查了相同的 Node.js 版本v12.10.0
、相同的 npm 包版本 ( javascript-lp-solver 0.4.5
)、相同的输入,我们得到了不同的结果。
方案 A
方案 B
- 从https://github.com/JWally/jsLPSolver.git克隆的本地代码
main.js
如下:
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 的返回与本地代码相同。
解决方案
终于发现: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 获得的代码中的差异,一切都变得清晰起来,并回到了相同的解决方案。
推荐阅读
- javascript - 一种在不知道嵌套 js 对象中的路径的情况下访问属性的方法
- excel - 如何使用 VLOOKUP 返回任何不同的结果?
- spring - 运行 KafkaEmbedded 进行单元测试时出现 java.lang.NoClassDefFoundError
- node.js - 将 Node.js 应用程序上传到 WinSCP 服务器
- sql - 使用 group by 子句从具有最大值的行中获取另一个值
- javascript - firebase node js TypeError:无法读取导出时未定义的属性“toId”
- python - 如何使用pandas groupby对一些行降序和一些行升序排序
- reactjs - 对象作为反应子无效(react-native)
- interrupt - STM32 SPI在使用中断时丢弃数据
- php - 在woocommerce中将任何产品添加到购物车后,如何立即删除客户端浏览器上的“PHPSESSID”cookie?