我需要实现一个人与人之间具有视觉亲密关系的项目,任何人都可以推荐一个人与人之间亲密接触的算法吗?
亲密度会随着时间的推移而减弱(如果您长时间点击/拨打它,亲密度会自动衰减)。
在我的地址簿中假设:
Person Intimacy(0-100%)
A 40%
B 80%
C 10%
在我打电话给A后,A的亲密度需要提高,就像这样
Person Intimacy(0-100%)
A 42%
B 80%
C 10%
在接下来的5天后没有任何反应,A,B,C的亲密度需要下降,就像这样
Person Intimacy(0-100%)
A 37%
B 78%
C 8%
感谢大家的回答
答案 0 :(得分:1)
亲密度会随着时间的推移而减弱(如果您长时间点击/拨打它,亲密度会自动衰减)。
您可以使用exponential decaying表示为Half Life
的数字double intimacy = Math.pow(0.5, time / halfLife);
如果您的问题有标准解决方案,我会感到惊讶。
典型的图形具有这样的形状。
您是否要求算法根据您拨打电话的频率来确定您对地址簿中某人的了解程度?
为此你可以使用Exponential Weighted Moving Average再次,我只是推测可能有用的东西。
你可以表达更多细节吗?
根据您提供的数据,半衰期约为28天。您可以像这样每天使用EWMA
double alpha = 1.0/28;
score = (contacted ? 1 : 0) * alpha + score * (1 - alpha);
e.g。
contacted, prev score, score
TRUE 40% 42%
FALSE 42% 41%
FALSE 41% 39%
FALSE 39% 38%
FALSE 38% 36%
FALSE 36% 35%
说衰败是28天,我打电话给同一个人200天。分数看起来像
double score = 0;
double alpha = 1.0 / 28;
boolean contacted = true;
for (int i = 0; i < 200; i++) {
score = (contacted ? 1 : 0) * alpha + score * (1 - alpha);
System.out.printf("%.3f%n", score);
}
打印
0.036
0.070
0.103
... deleted ...
0.999
0.999
0.999
分数不可能大于最大值(在这种情况下,等式中的1
)。