String getDebugDescription() { return getAttackType().toString() + " P. Hit: " + LOG_PER.format(getProbabilityToHit()) + ", Max Dam: " + LOG_DEC.format(getMaxDamage()) + ", Exp. Dam: " + LOG_DEC.format(getExpectedDamageOnHit()) + ", Num Crits: " + LOG_DEC.format(getExpectedCriticals()) + ", Kill Prob: " + LOG_PER.format(getKillProbability()); } }
Assert.assertEquals(5.0, testPhysicalInfo.getMaxDamage(), TOLERANCE); Assert.assertEquals(0.0099, testPhysicalInfo.getExpectedCriticals(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getKillProbability(), TOLERANCE); Assert.assertEquals(5.0, testPhysicalInfo.getExpectedDamageOnHit(), TOLERANCE); Assert.assertEquals(10.0, testPhysicalInfo.getMaxDamage(), TOLERANCE); Assert.assertEquals(0.0099, testPhysicalInfo.getExpectedCriticals(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getKillProbability(), TOLERANCE); Assert.assertEquals(10.0, testPhysicalInfo.getExpectedDamageOnHit(), TOLERANCE); Assert.assertEquals(10.0, testPhysicalInfo.getMaxDamage(), TOLERANCE); Assert.assertEquals(0.0099, testPhysicalInfo.getExpectedCriticals(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getKillProbability(), TOLERANCE); Assert.assertEquals(10.0, testPhysicalInfo.getExpectedDamageOnHit(), TOLERANCE); Assert.assertEquals(10.0, testPhysicalInfo.getMaxDamage(), TOLERANCE); Assert.assertEquals(0.5929, testPhysicalInfo.getExpectedCriticals(), TOLERANCE); Assert.assertEquals(0.1943, testPhysicalInfo.getKillProbability(), TOLERANCE); Assert.assertEquals(10.0, testPhysicalInfo.getExpectedDamageOnHit(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getMaxDamage(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getExpectedCriticals(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getKillProbability(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getExpectedDamageOnHit(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getMaxDamage(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getExpectedCriticals(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getKillProbability(), TOLERANCE); Assert.assertEquals(0.0, testPhysicalInfo.getExpectedDamageOnHit(), TOLERANCE);
Mockito.doReturn(15.0).when(testPhysicalInfo).getExpectedDamage(); Mockito.doReturn(0.46129).when(testPhysicalInfo).getExpectedCriticals(); Mockito.doReturn(0.02005).when(testPhysicalInfo).getKillProbability(); Mockito.doReturn(0.5).when(testPhysicalInfo).getProbabilityToHit(); testFireControl.calculateUtility(testPhysicalInfo); Mockito.doReturn(15.0).when(testPhysicalInfo).getExpectedDamage(); Mockito.doReturn(0.46129).when(testPhysicalInfo).getExpectedCriticals(); Mockito.doReturn(0.02005).when(testPhysicalInfo).getKillProbability(); Mockito.doReturn(0.0).when(testPhysicalInfo).getProbabilityToHit(); testFireControl.calculateUtility(testPhysicalInfo); Mockito.doReturn(15.0).when(testPhysicalInfo).getExpectedDamage(); Mockito.doReturn(0.46129).when(testPhysicalInfo).getExpectedCriticals(); Mockito.doReturn(0.02005).when(testPhysicalInfo).getKillProbability(); Mockito.doReturn(0.5).when(testPhysicalInfo).getProbabilityToHit(); Mockito.doReturn(mockPilot).when(testPhysicalInfo).getTarget(); Mockito.doReturn(15.0).when(testPhysicalInfo).getExpectedDamage(); Mockito.doReturn(0.46129).when(testPhysicalInfo).getExpectedCriticals(); Mockito.doReturn(0.12005).when(testPhysicalInfo).getKillProbability(); Mockito.doReturn(0.5).when(testPhysicalInfo).getProbabilityToHit(); testFireControl.calculateUtility(testPhysicalInfo); Mockito.doReturn(15.0).when(testPhysicalInfo).getExpectedDamage(); Mockito.doReturn(0.46129).when(testPhysicalInfo).getExpectedCriticals(); Mockito.doReturn(0.01005).when(testPhysicalInfo).getKillProbability(); Mockito.doReturn(0.5).when(testPhysicalInfo).getProbabilityToHit(); testFireControl.calculateUtility(testPhysicalInfo);
/** * 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); }
setExpectedCriticals(getExpectedCriticals() + hitLocationProbability * getProbabilityToHit()); if ((hitLoc == Mech.LOC_HEAD) || (hitLoc == Mech.LOC_CT)) { setKillProbability(getKillProbability() + hitLocationProbability * getProbabilityToHit());