Rust 调整参数以优化无CNN的分数

Rust 调整参数以优化无CNN的分数,rust,artificial-intelligence,Rust,Artificial Intelligence,我试图在Rust中创建一个代理,它使用评分函数来确定2D统一成本网格上的最佳移动。游戏的细节不是很相关,除了知道每个回合你可以选择4个动作(上、下、左或右)中的一个,并且你要与在同一个棋盘上玩的其他AI竞争。目前,人工智能通过几种不同的简单算法,如使用A*来寻找敌人或食物,来“分支”未来可能的路径。在未来的模拟运行时,将保存一些特征,包括我们在该分支上杀死的敌人数量、我们吃的食物量以及未来分支在我们死亡之前持续的时间 一旦我们准备好采取行动,我们会给每个未来预测分支打分,并朝着平均得分最高的方向

我试图在Rust中创建一个代理,它使用评分函数来确定2D统一成本网格上的最佳移动。游戏的细节不是很相关,除了知道每个回合你可以选择4个动作(上、下、左或右)中的一个,并且你要与在同一个棋盘上玩的其他AI竞争。目前,人工智能通过几种不同的简单算法,如使用A*来寻找敌人或食物,来“分支”未来可能的路径。在未来的模拟运行时,将保存一些特征,包括我们在该分支上杀死的敌人数量、我们吃的食物量以及未来分支在我们死亡之前持续的时间

一旦我们准备好采取行动,我们会给每个未来预测分支打分,并朝着平均得分最高的方向前进。这个分数本质上是前面提到的每个特征乘以一个常数的总和。例如,分数可能是
30*吃的食物数量+100*杀死的敌人数量
。然而,数字30和100几乎是通过实验随机选择的。如果蛇是因为不吃食物而死亡的,那么我会增加吃食物的分数乘数。然而,有10种不同的特征,每种特征都有各自的权重。手动找出它们之间的关系既耗时又不容易收敛到最优策略


我的问题就在这里。我想找到一种方法,通过类似Q学习的过程来“训练”AI的价值观。当你赢或输的时候,有一个非常明显的终端条件,这对你很有帮助。我目前的想法是创建一个包含每个参数100个可能值的表,然后用每个组合玩100个游戏并记录获胜率。但是,这需要
(1000选择10)*100个
游戏或
2.6E25
游戏。似乎应该有一种聪明的方法来消除不良组合,使用某种形式的损失最小化。如果有人建议在没有神经网络的情况下调整这些参数,我们将不胜感激。

任何一种优化算法都应该有效:梯度下降法、单纯形法……谢谢@Jmb的回复。我的问题是,我不知道如何将线性回归应用于我的情况。我假设我会在整场比赛中使用相同的得分函数,然后根据我赢了还是输了那场比赛来调整数值。但是,我的从属变量是什么,函数创建的分数或我在比赛中获胜或失败时分配的值?由于我没有标记的数据集,我不知道每次回合后评分函数的损失是什么。我衡量成功的唯一标准是我赢了还是输了那场比赛。任何一种优化算法都应该有效:梯度下降、单纯形……谢谢@Jmb的回复。我的问题是,我不知道如何将线性回归应用于我的情况。我假设我会在整场比赛中使用相同的得分函数,然后根据我赢了还是输了那场比赛来调整数值。但是,我的从属变量是什么,函数创建的分数或我在比赛中获胜或失败时分配的值?由于我没有标记的数据集,我不知道每次回合后评分函数的损失是什么。我衡量成功的唯一标准是我是否赢了那场比赛。