首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maxmin 的代码实现

maxmin 的代码实现

作者头像
杨熹
发布2020-03-25 18:56:01
6850
发布2020-03-25 18:56:01
举报
文章被收录于专栏:杨熹的专栏杨熹的专栏

在解决石头剪子布这个问题的过程中,我们会用到一个 maxmin 函数,先来看看这个函数的理论基础。

首先,Minimax 也叫做鞍点,是人工智能,决策理论,博弈论,统计和哲学等领域中基础的决策规则,用于将最坏情况(最大损失)的损失降到最低。

而 maximmin与 minimax 有所不同:

Minimax 用于 zero-sum 的游戏,表示让对手的最大收益最小化,就相当于使自己的最大损失最小化,并使自己的最小收益最大化。

而 Maximin 是 non-zero-sum 游戏的常用术语,用来描述使自己的最小收益最大化的策略,这与让对手的最大收益最小化不同,与纳什均衡策略也不相同。

下面是代码实现:

def maxmin(A):
    num_vars = len(A)
    
    # minimize matrix c
    c = [-1] + [0 for i in range(num_vars)]
    c = np.array(c, dtype="float")
    c = matrix(c)
    
    # constraints G*x <= h
    G = np.matrix(A, dtype="float").T # reformat each variable is in a row
    # G before inverse sign to get the standard form
    print("G matrix:", G)
    G *= -1 # minimization constraint
    G = np.vstack([G, np.eye(num_vars) * -1]) # > 0 constraint for all vars
    new_col = [1 for i in range(num_vars)] + [0 for i in range(num_vars)]
    G = np.insert(G, 0, new_col, axis=1) # insert utility column for simplex tableau
    G = matrix(G)

    h = ([0 for i in range(num_vars)] + 
         [0 for i in range(num_vars)])
    h = np.array(h, dtype="float")
    h = matrix(h)
    
    # contraints Ax = b, sum of pi_rock, pi_paper, pi_scissors equal 1
    A = [0] + [1 for i in range(num_vars)]
    A = np.matrix(A, dtype="float")
    A = matrix(A)

    b = np.matrix(1, dtype="float")
    b = matrix(b)
    print("c matrix:", c)
    print("G matrix:", G)
    print("h matrix:", h)
    print("A matrix:", A)
    print("b matrix:", b)
    
    sol = solvers.lp(c=c, G=G, h=h, A=A, b=b)
    return sol

学习资料: https://en.wikipedia.org/wiki/Minimax#Maximin https://medium.com/@excitedAtom/linear-programming-in-python-cvxopt-and-game-theory-8626a143d428

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档