zoukankan      html  css  js  c++  java
  • 博弈论 笔记

    前言&简介

    博弈论太大了,全都要考的话,竞赛生涯就结束罢

    那么,什么是博弈?我们研究什么样的博弈?

    博弈论,是经济学的一个分支,主要研究具有竞争或对抗性质的对象,在一定规则下产生的各种行为。博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。

    通俗地讲,博弈论主要研究的是:在一个游戏中,进行游戏的多位玩家的策略。

    —— OI WIKI

    现在我们知道,博弈论差不多就是van♂游♂戏。但是我们显然不会真的研究玩大型电脑游戏的策略,不然就是电子竞技了。我们(大概率)也不会去研究象棋,围棋的策略,不然就是棋类竞赛了。OI中研究的多数是 公平组合游戏

    它需要满足一些条件:

    • 某一个动作,一方可以做,那另一方也可以做
    • 双方都知道完整的游戏信息,也不存在平局
    • 同一个状态不能到达多次
    • 游戏能够在有限步内结束,不能动的那一方输

    比如,围棋不是公平组合游戏,因为黑方不能动白棋,白方也不能动黑棋。同理,象棋也不是。当然,打扑克、麻将等游戏也不是,因为你不能知道别人手里是什么牌。、

    有向图游戏

    这是一种公平组合游戏。有一张有向图,上面有一个棋子。双方轮流移动棋子走一条边,走不了的输。

    对于一个有向图游戏,我们可以用拓扑排序,根据以下三条原则,来求出从每个点开始的胜负情况。称先手必胜的为“胜点”,否则为“负点”。

    • 如果一个点没有后继,那么它是负点
    • 如果一个点的后继里有一个负点,那么它是胜点
    • 如果一个点的后继里全是胜点,那么它是负点

    还挺显然的,不需要证明吧。

    SG函数与SG定理

    SG,即Sprague和Grundy,是这个定理的发现者(两人)的名字。

    我们来考虑一个情况,现在有 (n) 个有向图游戏,游戏双方轮流移动;每次可以任意选择其中一个游戏,并移动棋子走一条边;不能动的人输。

    那怎么解决?当然,你可以把每个有向图中的点放在一起,形成一个数组,然后把这个数组作为游戏的状态,合并成一个大的有向图。那当然可以,就是复杂度有一小点高。

    那怎么优化复杂度?别想了,你要是能自己独立想出来,Sprague和Grundy就自闭了。

    他俩提出了这个以下东西

    SG函数

    对于一个有向图上的点 (u)

    [SG(u)=egin{cases}0 & (uin end)\mex{SG(v)|vin nex(u)} & (else)end{cases} ]

    其中,集合 (end) 表示终止节点;(nex(u)) 表示 (u) 的后继状态;而 (mex) 函数,表示一个集合中没有出现的,最小的 自然数。mex 是 minimum excluded 的缩写 (据wikipedia)

    SG定理

    对于一个 (n) 个有向图组成的游戏,设其起点为 (s_1,s_2...s_n),令 (X=s_1oplus s_2...oplus s_n),那么:

    • (X=0) 时,先手必输
    • 否则先手必赢

    其中 (oplus) 表示按位异或。

    应用

    • Nim 游戏
    • 各种题 (假如能看出是个公平组合游戏模型,并写出SG函数)
  • 相关阅读:
    静态构造函数
    js-----Date对象
    JS中Math函数的常用方法
    js 简单数据类型和复杂数据类型的区别
    js new关键字 和 this详解
    JS 对象的三种创建方式
    js 预解析
    JS作用域问题
    js实现斐波那契数列
    JS 三元表达式
  • 原文地址:https://www.cnblogs.com/LightningUZ/p/14730651.html
Copyright © 2011-2022 走看看