我正在实施一个玩桌面游戏的系统。游戏通常使用真实棋子,真实骰子和物理环境进行游戏 - 请参阅http://s158.photobucket.com/user/Xintao/media/IMG_1388a_zpscf196faa.jpg.html以获取示例。
游戏规则很难简单定义(规则手册长达数百页!),此外,任何可行的策略都必须考虑到桌面上每个模型的每个统计数据以及地形的每个细节,达到数千个参数。我想使用神经网络并在人类之间的记录游戏上进行训练,从而同时学习规则和良好的策略。系统应该接受地形图和(x,y)坐标以及表上每个模型的各种统计数据,评估它们并返回一个模型的索引(int)以移动和(x,y)坐标(浮动)该模型应该移动的位置。这将重复进行,直到所有模型都移动为止。
我的训练数据也将采用这种格式 - 比如地图和模型参数组合形成70,000个输入,然后我的训练输入将是70,000乘n矢量,我的训练输出将是3乘n矢量。因为训练数据是从真实游戏中记录的,所以不会有任何无效动作。此外,由于规则的复杂性很高,因此很难以编程方式判断来自网络的结果是否是错误的'或不。
我之前使用ANN的经验一直使用Keras进行监督分类,使用model.fit(data, labels, epochs=int, batch_size=another_int)
,例如,模型定义为:
model = Sequential()
model.add(Dense(512, input_dim=10000))
model.add(Activation('relu'))
# hidden layers
model.add(Dense(4))
model.add(Activation('softmax'))
并且训练数据是10,000×n阵列,相关标签是1×n阵列,带有四个可能的标签。
结果是肯定是正确的或绝对错误的,并且每行数据只有一个值。
如果一行数据的结果与相关输出中的数据不完全匹配,并且输出有3个与输入数据关联的值,我将如何训练一行数据的结果可能不一定是错误的,包括一个int和两个浮点数?