-1

人と人との視覚的な親密さを備えたプロジェクトを実装する必要がありますが、電話での連絡における人の親密さのアルゴリズムを誰かが推奨できますか?

親密さは時間の経過とともに減衰します(長時間クリック/ダイヤルした場合、親密さは自動的に減衰します)。

私の名簿で仮定する:</ p>

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%

みんなの答えありがとう

4

1 に答える 1

1

親密さは時間の経過とともに減衰します(長時間クリック/ダイヤルした場合、親密さは自動的に減衰します)。

半減期として表される指数関数的減衰数を使用できます

double intimacy = Math.pow(0.5, time / halfLife);

あなたの問題に対する標準的な解決策があれば、私は驚きます。


典型的なグラフはこのような形をしています。

ここに画像の説明を入力してください


あなたは、あなたが彼らに電話する頻度に基づいて、あなたがあなたのアドレス帳で誰かをどれだけよく知っているかを決定するためのアルゴリズムを求めていますか?

このために、指数加重移動平均を使用することができます。ここでも、何が役立つかを推測しています。

もっと詳しく教えていただけますか?

あなたが与えたデータから、半減期は約28日です。このようにEWMAを日常的に使用できます

double alpha = 1.0/28;

score = (contacted ? 1 : 0) * alpha + score * (1 - alpha); 

例えば

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方程式の)より大きくなることはできません。

于 2012-10-16T10:56:58.563 に答える