/** * calculates the 'utility' of a physical action. * * @param physicalInfo The {@link PhysicalInfo} to be calculated. */ void calculateUtility(final PhysicalInfo physicalInfo) { // If we can't hit, there's no point. if (0.0 >= physicalInfo.getProbabilityToHit()) { physicalInfo.setUtility(-10000); return; } double utility = DAMAGE_UTILITY * physicalInfo.getExpectedDamage(); utility += CRITICAL_UTILITY * physicalInfo.getExpectedCriticals(); utility += KILL_UTILITY * physicalInfo.getKillProbability(); utility *= calcTargetPotentialDamageMultiplier(physicalInfo.getTarget()); utility -= (physicalInfo.getTarget() instanceof MechWarrior) ? EJECTED_PILOT_DISUTILITY : 0; utility += calcCommandUtility(physicalInfo.getTarget()); utility += calcStrategicBuildingTargetUtility(physicalInfo.getTarget()); utility += calcPriorityUnitTargetUtility(physicalInfo.getTarget()); utility -= calcCivilianTargetDisutility(physicalInfo.getTarget()); physicalInfo.setUtility(utility); }
utility += KILL_UTILITY * firingPlan.getKillProbability(); utility *= calcTargetPotentialDamageMultiplier(firingPlan.getTarget()); utility += TARGET_HP_FRACTION_DEALT_UTILITY * calcDamageAllocationUtility(firingPlan.getTarget(), expectedDamage); utility -= calcCivilianTargetDisutility(firingPlan.getTarget());