此外,当AI玩家自动做出选择时,人类玩家会收到做出决定的提示。可能有无限数量的玩家子类,每个子类都有一个人和人工智能版本。因为Java没有真正的多重继承,所以我目前的解决方案是使用AI玩家继承的AI接口和Human继承的人工接口。这些接口中的每一个都有一个唯一的makeDecision()方法,用于每个可能的决策。从决策界面重写代码很好,因为不同类型的玩家不应该拥有相同的AI。下面是我的代码结构的一个简单示例:{
int
虽然我在Cplex中的线性规划模型的结果似乎是有意义的,但q变量有时是随机的(至少对我来说它似乎是随机的)显示微小的值,比如4e^-14。这对决策变量没有影响,但仍然非常令人恼火,因为我不确定我的模型中是否有什么不正确。您可以在这里看到Q变量的结果,并在这里使用迷你残差:。当我引入二进制变量时,这些残差才开始出现在我的模型中。Q的定义为:右旋ci浮子q(年),i in Options = (ci * (at+s[i]-at+s[i]-1));
A是一个决策变量。这是一个约束,Q受以下约束: qi == ai * pi* y
我正在调用我的AI类中的一个方法,该方法旨在计算我绘制的角斗士对象实际需要结束的位置。我向该方法传递了一个列表,其中包含我想要放置的所有对象。AI类之前的一个方法已经确定了它们之间的距离,我将其存储为gladiator0..1..2..etc.movementGoal。这意味着我迭代列表的标准方法将不起作用,因为我需要关于另一个角斗士的移动决策的信息,以便在这些决策交互时找出任何一个角斗士的实际移动。我在Ai类中的方法如下所示:
public void moveAI(List<Gladiator&g