请问类似 QQ 断线重连的时间间隔,是不是有一个什么算法之类能算出来的。

2018-02-05 16:21:58 +08:00
 FanError
比如刚开始时,5 秒重连,连不上变为 15 秒重连,然后 45 秒重连,然后 2 分钟重连,然后 5 分钟重连,然后 30 分钟重连,然后 1 小时重连。。

或者问下有没有这样的算法(感觉我要的效果和 QQ 重连有点像),比如做一个抢单程序,当传入一个总数,当传入的总数越小时,返回的数越小,当传入的总数越大,返回的数越大。
比如商家放出一个商品,数量有 10 个,我抢 2 ( 20%)个机率很高,如果放出一个商品,数量有 100 个,我抢 40(40%)个机率很高。。为了尽可能多抢,我不能永远设为 20%。。

感觉应该有一个什么算法能算出来的。。数学不好,大佬指点。
1966 次点击
所在节点    问与答
10 条回复
TimePPT
2018-02-05 16:56:55 +08:00
完全看不懂你说啥意思。

QQ 重连那个用一个带状态判断的 loop 就能搞定

只要给个初始化 gap_time = 5 秒 如果连接失败
间隔时间 = 间隔时间 * 系数 k 继续进入下一个 loop 就完了。
一旦链接成功 reset 间隔时间到 5s 不就好了
CEBBCAT
2018-02-05 17:01:17 +08:00
我知道是智能调整工作,但还是没看太明白,后半部分太意识流了,再描述描述?
Monstercat
2018-02-05 17:03:04 +08:00
你可知道什么叫等比数列
CEBBCAT
2018-02-05 17:03:05 +08:00
> 或者问下有没有这样的算法(感觉我要的效果和 QQ 重连有点像),比如做一个抢单程序,当传入一个总数,当传入的总数越小时,返回的数越小,当传入的总数越大,返回的数越大。

这俩数是啥意思?

> 比如商家放出一个商品,数量有 10 个,我抢 2 ( 20%)个机率很高,如果放出一个商品,数量有 100 个,我抢 40(40%)个机率很高。。为了尽可能多抢,我不能永远设为 20%。。

什么不能设置为 20 ?
FanError
2018-02-05 17:15:05 +08:00
@TimePPT
@CEBBCAT

我再描述描述,拿虚拟货币市场卖单举例,实际上也是想把公式套用到这个里面用的。

假如当前卖单数量是 10 个,有很多机器人都在下单,我在买入前要简单的判断下要买的数量是不是成功性比较高的,这时我策略设定买 2 个( 20%)基本是没问题的(还有 8 个让给其它机器人在抢),程序可以继续执行下单。

然后继续假如当前卖单数量是 100 个,这个时候我设定抢 40 个( 40%),基本也是没问题的,可以继续执行下单。

其实就是想找一个算法(感觉有这种算法),不想人肉编码判断这个数量是否相对安全。
假如是人肉编码就是
if (总数 < 10) {
// 要抢的数量不大于 20%
} else if (总数 >10 && 总数 < 100) {
// 要抢的数量不能大于 40%
} else if (总数 > 100 && 总数 < 1000) {
// 要抢的数量不能大于 60%
} else if (更多) {

}
FanError
2018-02-05 17:17:14 +08:00
@CEBBCAT 回 4 楼同学,5 楼详细描述了。。

这个时候设为 20%没问题,但下的单量就小了。每次只能抢里面的 20%
CEBBCAT
2018-02-05 17:21:27 +08:00
你要是做数字货币,那可以查查之前的数据然后绘个回归曲线出来,拿这个曲线来办事儿(其实我还是没听太懂为啥资源多了自己的可能性就高了,不是还有其他竞争者么,大家都很强的吧?)

我觉得这是博弈问题
RustingSword
2018-02-05 17:21:59 +08:00
前面那个场景用的算法大概类似于 https://en.m.wikipedia.org/wiki/Exponential_backoff 后面同没看懂。
TimePPT
2018-02-05 17:25:25 +08:00
@FanError 你这说的跟 QQ 重连那个完全没关系

你只是不想硬编码条件来约束抢单量。

最简单的,累计数据,做一个数据拟合去建立模型,利用模型去确定总量和理想最大抢单量关系。
xinQing
2018-02-06 16:34:30 +08:00
斐波拉契数列?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428622

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX