Python 跟踪动态评分

Python 跟踪动态评分,python,statistics,artificial-intelligence,agent,Python,Statistics,Artificial Intelligence,Agent,我几乎没有接受过正式的离散数学培训,也遇到了一些小问题。我试着写一个代理,读取一个人的(任意)分数,每隔一段时间就得一分。代理需要经常“落后”和“追赶”,这样人类玩家才会相信有竞争在进行。然后,代理必须要么赢,要么输(取决于条件) 我尝试了一些不同的技术,包括一个不可靠的概率循环(失败得很厉害)。我认为这个问题需要像发射隐马尔可夫模型(HMM)这样的东西,但我不确定如何实现它(甚至不知道这是否是最好的方法) 我有一个坏习惯,但又一次,糟透了 我希望\uuuuu main\uuuuuu函数能够为这

我几乎没有接受过正式的离散数学培训,也遇到了一些小问题。我试着写一个代理,读取一个人的(任意)分数,每隔一段时间就得一分。代理需要经常“落后”和“追赶”,这样人类玩家才会相信有竞争在进行。然后,代理必须要么赢,要么输(取决于条件)

我尝试了一些不同的技术,包括一个不可靠的概率循环(失败得很厉害)。我认为这个问题需要像发射隐马尔可夫模型(HMM)这样的东西,但我不确定如何实现它(甚至不知道这是否是最好的方法)

我有一个坏习惯,但又一次,糟透了


我希望
\uuuuu main\uuuuuu
函数能够为这个代理的目标提供一些见解。它将在pygame中调用。

我假设人类看不到玩游戏的计算机代理。如果是这样的话,这里有一个想法你可以试试

创建一个列表,列出任何给定动作都可以得分的所有可能的得分组合。对于每一步,找到一个你希望代理在当前回合后结束的得分范围。将可能的移动值集减少为仅在该特定范围内结束代理的值,然后随机选择一个。随着条件的变化,您希望代理能够落后或领先多远,只需适当地滑动您的范围


如果你想找一种对人类有内在心理影响的东西,我帮不了你。如果您想了解更具体的情况,您需要为我们定义更多的规则。

我认为您可能考虑过度了。您可以使用简单的概率来估计计算机的分数应该“赶上”的频率和程度。此外,您可以计算计算机分数和人类分数之间的差异,然后将其输入到一个类似于sigmoid的函数中,以给出计算机分数增加的程度

说明性Python:

#!/usr/bin/python
import random, math
human_score = 0
computer_score = 0
trials = 100
computer_ahead_factor = 5 # maximum amount of points the computer can be ahead by
computer_catchup_prob = 0.33 # probability of computer catching up
computer_ahead_prob = 0.5 # probability of computer being ahead of human
computer_advantage_count = 0
for i in xrange(trials):
    # Simulate player score increase.
    human_score += random.randint(0,5) # add an arbitrary random amount
    # Simulate computer lagging behind human, by calculating the probability of
    # computer jumping ahead based on proximity to the human's score.
    score_diff = human_score - computer_score
    p = (math.atan(score_diff)/(math.pi/2.) + 1)/2.
    if random.random() < computer_ahead_prob:
        computer_score = human_score + random.randint(0,computer_ahead_factor)
    elif random.random() < computer_catchup_prob:
        computer_score += int(abs(score_diff)*p)
    # Display scores.
    print 'Human score:',human_score
    print 'Computer score:',computer_score
    computer_advantage_count += computer_score > human_score
print 'Effective computer advantage ratio: %.6f' % (computer_advantage_count/float(trials),)
#/usr/bin/python
导入随机、数学
人类健康评分=0
计算机评分=0
试验=100次
计算机领先因素=5#计算机领先的最大点数
计算机赶超概率=0.33#计算机赶超概率
计算机领先于人类的概率=0.5
计算机\u优势\u计数=0
对于X系列中的i(试验):
#模拟球员得分增加。
人类得分+=随机。随机数(0,5)#添加任意随机数
#模拟计算机落后于人类,通过计算
#计算机根据与人类分数的接近程度向前跳跃。
分数差异=人类分数-计算机分数
p=(数学测验(分数差异)/(数学测验/2.)+1)/2。
如果是random.random()人类得分
打印“有效计算机优势比率:%.6f%”(计算机优势计数/浮动(试用)”)

更多细节可能会有所帮助-这是什么样的“游戏”?分数是经常得分的,比如弹球比赛,还是很少得分的,比如足球(除非你是巴西球员)?游戏是俄罗斯方块。我写这篇文章是为了让玩家在每一个方块上都能得到10分,当玩家得到一些分数线时,他们会得到**2*100。只是好奇,为什么不让它成为一场真正的比赛,让经纪人实际玩游戏并获得分数呢?这是一个心理学实验;需要有赢的条件和输的条件。我喜欢这样。我将在周六尝试实施它。