英文:
Design an algorithm to calculate probability of team winning depending on variables
问题
I am designing a football-based game in Java where two teams will face off. Then I want to design an algorithm to calculate the probability of team A or team B winning depending on some factors.
-
The strength of the team (which doesn't change after being set)
-
The form the team is in (how many of their last 5 games they won or lost)
-
Some randomness so it can go either way even if team A is much stronger and in better form than team B.
I don't really know where to start though, any tips would be appreciated!
英文:
so I am designing a football based game in Java where two teams will face off. Then I want to design an algorithm to calculate the probability of team A or team B winning depending on some factors.
-
The strength of the team (which doesn't change after being set)
-
The form the team is in (how many of their last 5 games they won or lost)
-
Some randomness so it can go either way even if team A is much stronger and in better form than team B.
I don't really know where to start though, any tips would be appreciated!
答案1
得分: 1
让我们从面向对象编程(OOP)开始:
public class Team {
private double /*int*/ strength; // 根据您的喜好更改数据类型
private double formOfLastFiveMatches; // 失去全部为0,全部赢为1,赢了3场比赛为0.6
private Random random; // 用于随机性
// ... 构造函数、获取器、设置器
}
这是模拟您的球队。
现在开始计算比赛。
public class SoccerSimulator {
private Team a, b;
// ... 构造函数、获取器、设置器
/**
* 计算 A 赢得比赛的概率。
* @return A 赢得比赛的概率。
*/
public double calculateProbability() {
double strengthA = a.getStrength();
double strengthB = b.getStrength();
if (a.getForm() <= 0.2)
strengthA *= (1 + (Math.random % 0.1)); // 最多10%的奖励,因为他们在过去的5场比赛中只赢了0-1场
if (b.getForm() <= 0.2)
strengthB *= (1 + (Math.random % 0.1));
// 对随机数生成器执行某些操作
// ...
// TODO:更好的算法
double sum = strengthA + strengthB;
return strengthA / sum; // 获取 A 相对于总和的分数。
}
}
这是一个相当基本的算法,但您可以将其用作起点。
英文:
Let's start with a bit of OOP:
public class Team{
private double /*int*/ strength;//Change the datatype, by your favors
private double formOfLastFiveMatches;//0 for lost all, 1 for won all, 0.6 for won 3 of 5
private Random random; //For the randomness
//...Constructors, Getters,Setters
}
This is models your team.
Now start with calculating the match.
public class SoccerSimulator{
private Team a,b;
//...Constructors, Getters,Setters
/**
* Calculate the probability, that A wins.
* @return the probability, A wins.
*/
public double calculateProbability(){
double strengthA = a.getStrength();
double strengthB = b.getStrength();
if(a.getForm() <= 0.2)
strengthA *= (1 + (Math.random % 0.1));//Up to 10% bonus, because they won only 0-1 games in the last 5 games
if(b.getForm() <= 0.2)
strengthB *= (1 + (Math.random % 0.1));
//Do something with the random number generator
//....
//TODO: Better algorithm
double sum=strengthA + strengthB;
return strengthA / sum;//Get the fraction A has in relationship to the sum.
}
}
This is an quite basic algorithm, but you can use it as a starting point.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论