# 集-训练 **Repository Path**: Zeng_YL/ji-train ## Basic Information - **Project Name**: 集-训练 - **Description**: 一种回合制游戏 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-01-17 - **Last Updated**: 2024-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 集 “**集**”的对战,与基于遗传算法的人工智能。 ## 啥 “集”,一种回合制游戏,在我的小学流行。 其规则简单,无需道具,兼具运气与策略。 其生命力顽强,衍生出多个变种,可见其易于修改。 其源已不可考。经搜索,似乎更流行的名字叫作“波波攒”。 ## 规则 游戏由多个**回合**构成。每个回合,双方同时出招。如果一方的**技能**强于另一方,则游戏结束,强者胜。否则双方不分强弱,继续下一回合。 “集”也指一种游戏币。双方各有若干(**自然数**个)集,数量互相知道。游戏开始时,双方都没有集。出招后,会根据技能,**消耗或获得**自己的集。不能透支,举例:如果只有一个集,不能出会消耗两个集的招。 每个**技能**有两要素:消耗(或获得)的集的数量强于(弱于)哪些技能。如果技能甲弱于乙,则乙强于甲。技能的“强于”满足**反自反性**、**反对称性**,经常不满足**传递性**。 由此可见,仅需知道一场游戏的全部出招,就能知道游戏的全部信息。集的数量取决于自己的技能,游戏的输赢取决于双方的技能。于是,显然,集的数量互相知道。 以上的基本规则一般是不变的(特殊情况下会变,例如一种规则叫“无限集”,其中存在技能,不消耗集但要求有集)。一个**变体**是很多技能的集合,不同**变体**的区别就在技能。 以下是最常见的变体。其中,技能“集”也叫集,和游戏本身以及游戏币同名。 | 技能名称 | 集的损益 | 强于 | 弱于 | | :------: | :---------: | :------------------------------------- | ---------------------: | | 集 | 获得 1 个集 | | 小波、中波、大波、黑洞 | | 小防 | 消耗 0 个集 | | 中波、大波、黑洞 | | 中防 | 消耗 0 个集 | | 小波、大波、黑洞 | | 大防 | 消耗 1 个集 | | 黑洞 | | 小波 | 消耗 1 个集 | 集、中防 | 中波、大波、黑洞 | | 中波 | 消耗 2 个集 | 集、小波、小防 | 大波、黑洞 | | 大波 | 消耗 3 个集 | 集、小波、小防、中波、中防 | 黑洞 | | 黑洞 | 消耗 5 个集 | 集、小波、小防、中波、中防、大波、大防 | | ## 智能 该程序使用的人工智能极其简单,就是一个映射,输入自己和对方的集的数量,会得到所有可以出的技能的权重。人工智能出招时,根据权重,随机选择一个技能出。 可以出的技能,有两个限制。其一,要求自己的集的数量够,这是当然。其二,要求没有另一个更好的技能,不管对方出什么,都比这个技能更好。例如,若对方没有集,则不应出任何防;若已经有五个集,则小波一定不如黑洞。 一方的集的数量,如果足以出任何一招,则看作最贵的技能的消耗。这是为避免映射无限大。例如,常见变体中,一方的集的数量如果大于五,则看作五。 同一变体下的不同人工智能,区别只在权重。用遗传算法来优化权重,可以得出较为聪明的人工智能。 ## 使用 `cargo r -r` 运行程序。(若不用 release 编译,运行速度奇慢无比) 输入指令可以执行功能。名字大都清楚。`t`、`p`、`q` 常用。 训练后,将会产生 `archive` 文件。运行时会读取之,没有则重新生成。