我有一个关于我创建的游戏的非常简单的问题(这不是家庭作业):以下方法应该包含什么来最大化收益:
private static boolean goForBiggerResource() {
return ... // I must fill this
};
我再次强调这不是功课:我试图了解这里的工作。
“策略”是微不足道的:只有两种选择:真或假。
“游戏”本身很简单:
P1 R1 R2 P2
R5
P3 R3 R4 P4
有四个玩家(P1、P2、P3 和 P4)和五个资源(R1、R2、R3、R4 都值 1 和 R5,值 2)
每个玩家都有两个选择:要么去靠近它的起始位置的资源,它给出 1 并且玩家肯定会得到(没有其他玩家可以先得到那个资源),或者玩家可以尝试去寻找一个资源值得 2... 但其他玩家也可能会去。
如果两个或更多玩家去争取更大的资源(价值 2 的那个),那么他们将同时到达更大的资源,并且随机只有一名玩家会得到它,而其他玩家则去该资源将得到 0(他们不能回到价值 1 的资源)。
每个玩家都玩相同的策略(在goForBiggerResource () 方法中定义的那个)
玩家不能互相“交谈”以就策略达成一致
游戏运行 100 万次
所以基本上我想填充方法goForBiggerResource(),它返回真或假,以最大化回报。
这是允许测试解决方案的代码:
private static final int NB_PLAYERS = 4;
private static final int NB_ITERATIONS = 1000000;
public static void main(String[] args) {
double totalProfit = 0.0d;
for (int i = 0; i < NB_ITERATIONS; i++) {
int nbGoingForExpensive = 0;
for (int j = 0; j < NB_PLAYERS; j++) {
if ( goForBiggerResource() ) {
nbGoingForExpensive++;
} else {
totalProfit++;
}
}
totalProfit += nbGoingForExpensive > 0 ? 2 : 0;
}
double payoff = totalProfit / (NB_ITERATIONS * NB_PLAYERS);
System.out.println( "Payoff per player: " + payoff );
}
例如,如果我建议以下解决方案:
private static boolean goForBiggerResource() {
return true;
};
然后所有四个玩家都将寻求更大的资源。他们中只有一个会随机得到它。超过一百万次迭代,每个玩家的平均收益将是 2/4,即 0.5,程序将输出:
每位玩家的收益:0.5
我的问题很简单:goForBiggerResource()方法(返回 true 或 false)应该使用什么来最大化平均收益,为什么?