gpt4 book ai didi

java - 如何为硬币翻转游戏设计 "machine learning"方法

转载 作者:行者123 更新时间:2023-11-30 09:37:57 25 4
gpt4 key购买 nike

我即将完成一门算法类(class),教授希望我们做一个“机器学习”练习,我在该项目中几乎拥有自由支配权,但是,它必须属于监督学习的总体范围。因此,我决定进行一次抛硬币模拟,并由计算机玩家进行下注。我的想法是让硬币有偏差,看看计算机在使用训练数据下注时是否能够发现这种偏差。我真的不知道如何解决这个问题..

我的一个想法是在训练轮(例如 100 次投注)后确定投注时,增加获胜计数器并将其作为参数传递到方法中。这样,计算机玩家就可以决定放置更多的正面,例如正面出现的概率为 90%。经过充分的训练,我认为计算机会发现偏差。

我这里有代码可以根据结果增加胜利计数器,但是,我不太确定从哪里开始。 IE。如何保存是否获胜以及正面或反面是否出现的相应数据,然后使用该信息在下一轮中下注。任何建议将不胜感激。如果有人认为我的做法是错误的,我也愿意使用不同的方法。

请记住,我是一名本科二年级学生,对实际的机器学习技术知之甚少,因此我的问题中加了引号。

public class CoinFlip {

public static void main(String[] args) {
int bank = 500;
int headsCount=0;
int tailsCount=0;
int winCounter=0;
int lossCounter=0;
String[] flipResults = new String[100];

ComputerPlayer randomPlayer = new ComputerPlayer();
Coin coin = new Coin();

for (int i = 0; i < 100; i++) {
randomPlayer.placeRandomBet();
flipResults[i] = coin.flip();
if(flipResults[i].equals("heads")){
headsCount += 1;
}
else{
tailsCount +=1;
}
if(flipResults[i].equals(randomPlayer.placeRandomBet())){
bank += 50;
winCounter+=1;
}
if(!flipResults[i].equals(randomPlayer.placeRandomBet())){
bank -=50;
lossCounter+=1;
}
}
}

public static class ComputerPlayer{

double bet;
String heads = "heads";
String tails = "tails";

public String placeRandomBet(){
bet = Math.random();
if(bet < .5){
return heads;
}
else return tails;
}

public static String placeLearnedBet(int wins; int losses){
//not sure where to start
}

public static class Coin {

double coin;
String heads = "heads";
String tails = "tails";

public String flip() {
if (Math.random() < .9) {
return heads;
} else {
return tails;
}
}

}

最佳答案

就发现偏差而言,这并不是那么困难。基本上,您只需根据总游戏次数中正面的数量来猜测偏差,这个比率将为您提供平均偏差。因此,例如,如果您有 51 个正面和 49 个反面,那么您会猜测正面的偏差为 51%。

最终,我认为 Benjy 是正确的,您应该根据更有可能的情况(根据您的偏见)下注(正面或反面)。随着你获得越来越多的样本,你的猜测偏差将收敛到实际偏差。就投注而言,从期望的角度来看,您应该尽可能多地投注;但从现实的角度来看,这不是一个好的策略(因为如果你总是赌上一切,你最终会输掉一切,除非硬币是 100% 偏向某一方面的)。

一种可能的投注策略可以是“前瞻性”,即假设您将在接下来的 n 轮中进行相同的投注,并计算您获胜与失败的概率。您并不是直接尝试找到下注金额,而是尝试找到给出一定成功概率的数字 n(要期待的轮数)。投注方案风险越大,可接受的成功概率越小(即方案风险越大),投注方案越保守,则可接受的成功概率越大。一旦您找到保证成功所需的轮数(在您选择的概率内),您就可以将您的底池除以预期轮数,即下注的最大金额,这样如果您输掉接下来的 n 轮中的每一轮,您仍然可以下注。

您可以看到,通过上述,保守的方案将需要越来越多的前向轮次,因此赌注会越来越小,而对于有风险的方案,成功的概率很小,因此需要更少的轮次并允许以获得更大的赌注。

最后一件有趣的事情是决定您应该选择的方案的风险有多大。根据我所做的,硬币的偏差越小(即正面或反面的可能性越接近 50%),您应该承担的风险就越大,并且硬币的偏差越大(即正面或反面的可能性为 90%)反面或正面的几率为 90%)您的投注风险越小。这是有道理的,因为如果硬币是完全公平的,那么就没有一种投注方案通常会获胜,所以你最好的方法就是下大注,并捕获 50% 的机会获胜。另一方面,如果硬币有极大的偏差,那么游戏本身的风险就不是很大,因此您的投注方案不需要有很大的风险。在后一种情况下,如果您倾向于下大注,那么您输掉一切的机会就会增加,而小赌注几乎可以保证获得丰厚的返回。请记住,随着您的底池增长,您可以进行越来越大的赌注,而不会增加赔钱的风险,因此,如果代币非常有偏差,那么您的底池很容易获得指数级增长。

关于java - 如何为硬币翻转游戏设计 "machine learning"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27141950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com