上一篇博客写了关于这个算法的讲解,http://my.oschina.net/aptx4869/blog/156539
现在就使用Java语言来实现
女生类:Girl.java
<!-- lang: java -->
public class Girl{
private int id;//相片id
private float currentScore;//新等级分 默认值为1400
private float expectedWin;//期望胜率(最初均为0.5)
private int result;//胜负值
}
评比类 ToCompare.java
<!-- lang: java -->
public class ToCompare{
private Girl lostGirl;
private Girl winGirl;
public ToCompare(Girl win,Girl lost){
lostGirl=lost;
winGirl=win;
}
根据用户的评比结果,可以得到胜方winGirl和lostGirl,将其传给ToCompare.java
先计算期望胜率
<!-- lang: java -->
public void computeExpectedWin(){
if(winGirl.getCurrentScore()==lostGirl.getCurrentScore()){//如果双方的当前等级分相等,则期望胜率均为0.5
winGirl.setExpectedWin(0.5f);
lostGirl.setExpectedWin(0.5f);
return;
}
else{//如果不相等
float winSub=lostGirl.getCurrentScore()-winGirl.getCurrentScore();
float lostSub=winGirl.getCurrentScore()-lostGirl.getCurrentScore();
winGirl.setExpectedWin(setExpecteWin(winSub));
lostGirl.setExpectedWin(setExpecteWin(lostSub));
return;
}
}
在期望胜率中要用到的方法setExpecteWin(float)
<!-- lang: java -->
public float setExpecteWin(float sub){
float temp=sub/400;
return 1/(1+(float)Math.pow(10,temp));
}
计算新等级分
<!-- lang: java -->
public void toComputeNewScore(){
float oldScore=winGirl.getCurrentScore();//获取当前等级分
//根据用户的评比结果设置新的等级分,胜的一方result=1,另一方为0
winGirl.setCurrentScore(computeNewScore(1,oldScore,winGirl.getExpectedWin()));
oldScore=lostGirl.getCurrentScore();
lostGirl.setCurrentScore(computeNewScore(0,oldScore,lostGirl.getExpectedWin()));
return;
}
在计算新等级分中要使用到的方法public float computeNewScore(int result,float oldScore,float expectedWin)
<!-- lang: java -->
public float computeNewScore(int result,float oldScore,float expectedWin){
float temp=result-expectedWin;
return oldScore+10*temp;}