gpt4 book ai didi

node.js - Node.js 中的 Anytime 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:33 25 4
gpt4 key购买 nike

anytime algorithm 是一种算法,它可以返回问题的有效解决方案,即使它在结束前的任何时间被打断。该算法持续运行的时间越长,有望找到越来越好的解决方案。”

我的问题是:如何在 Node.js 中编写 anytime 算法?

我有一个如下所示的函数(伪代码):

function findBestSolution(input) {
var bestSolutionSoFar = EMPTY_SOLUTION; // initialization
for (var i=1; i<=1000000; ++i) {
var newSolution = findNewSolution(...); // this might take a long time
if (newSolution.quality() > bestSolutionSoFar.quality())
bestSolutionSoFar = newSolution;
}
return bestSolutionSoFar;
}

现在,由于长循环和新解的冗长计算,这个函数需要很长时间才能运行。

我想要的是让调用函数可以随时中断这个函数,得到当前的“bestSolutionSoFar”。

因此,例如,用户可能开始运行该功能,然后去喝点咖啡,然后回来中断该功能,这将给他找到目前为止最好的解决方案。

最佳答案

对于希望中断发生的方式,您是否有任何具体要求(或想法)?一种通用方法类似于以下内容(它只不过是在其工作步骤中增加一个计数器,但希望能传达总体思路)。

function Solver(){
this.intermediateAnswer = 0;
this.wrapItUp = false;
this.finalCallback = undefined;
};

Solver.prototype.interrupt = function(){
this.wrapItUp = true;
};

Solver.prototype.solve = function(startWith, cb) {
var self = this;
function workStep(){
if (self.wrapItUp)
return self.finalCallback(self.intermediateAnswer);
self.intermediateAnswer = self.intermediateAnswer + 1;
setImmediate(workStep);
};

this.finalCallback = cb;
this.intermediateAnswer = startWith;
setImmediate(workStep);
};

var solver = new Solver();
solver.solve(1,function(result){
console.log('got to: ' + result);
});

// tell it to stop after five seconds

setTimeout(function(){solver.interrupt();}, 5000);

结果:

got to: 1790178

...或者大约 - 正如预期的那样,最终值(value)在 180 万左右反弹。

还有其他方法可以打包它(例如使用 promises 或可能使用 ES6 生成器而不是回调)以及使用其他东西来触发中断。我会很好奇自己看到其他答案,主要是出于求知欲。请评论这是否符合您的想法,或者在您计划使用的情况下它可能存在哪些不足。

关于node.js - Node.js 中的 Anytime 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22592975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com