我有一个关于我创建的游戏非常简单的问题(这不是作业):为了最大化回报,以下方法应包含什么内容:
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(),该方法返回true或false,以最大化收益。
这是允许测试解决方案的代码:
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),并且为什么?