电影社交网络中Facemash女生评比算法Java实现

上一篇博客写了关于这个算法的讲解,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;}

转载于:https://my.oschina.net/aptx4869/blog/156541

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值