/** * @return The amount of damage based on the damage of each weapon and their odds of hitting. */ synchronized double getExpectedDamage() { double expectedDamage = 0; for (WeaponFireInfo weaponFireInfo : this) { expectedDamage += weaponFireInfo.getExpectedDamageOnHit() * weaponFireInfo.getProbabilityToHit(); } return expectedDamage; }
public double getExpectedDamage() { return getProbabilityToHit() * getExpectedDamageOnHit(); }
String getDebugDescription() { return getWeapon().getName() + " 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()); } }
/** * Worker function that calculates the shooter's "best" actions that result in a TAG being fired. * @param shooter * @param game * @param owner * @return */ private WeaponFireInfo getTAGInfo(Mounted weapon, Entity shooter, IGame game, Princess owner) { WeaponFireInfo retval = null; double hitOdds = 0.0; // pretty simple logic here: take the best shot that you have for(Targetable target : FireControl.getAllTargetableEnemyEntities(owner.getLocalPlayer(), game, owner.getFireControlState())) { WeaponFireInfo wfi = new WeaponFireInfo(shooter, target, weapon, game, false, owner); if(wfi.getProbabilityToHit() > hitOdds) { hitOdds = wfi.getProbabilityToHit(); retval = wfi; } } return retval; }
@Test public void testGetExpectedDamage() { Mockito.when(mockWeaponFireInfoMG.getExpectedDamageOnHit()).thenReturn(2.0); Mockito.when(mockWeaponFireInfoMG.getProbabilityToHit()).thenReturn(0.1666); Mockito.when(mockWeaponFireInfoPPC.getExpectedDamageOnHit()).thenReturn(10.0); Mockito.when(mockWeaponFireInfoPPC.getProbabilityToHit()).thenReturn(0.7222); Mockito.when(mockWeaponFireInfoERML.getExpectedDamageOnHit()).thenReturn(5.0); Mockito.when(mockWeaponFireInfoERML.getProbabilityToHit()).thenReturn(0.4166); double expected = (2 * 0.1666) + (10 * 0.7222) + (5 * 0.4166); Assert.assertEquals(expected, testFiringPlan.getExpectedDamage(), TOLERANCE); }
/** * Test to make sure that Princess will choose a FiringPlan that shots at * a MechWarrior, instead of choosing to do nothing. */ @Test public void testCalcFiringPlansAtMechwarrior() { mockTarget = Mockito.mock(MechWarrior.class); Mockito.when(mockPPCFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockPPCFireInfo.getHeat()).thenReturn(10); Mockito.when(mockPPCFireInfo.getExpectedDamageOnHit()).thenReturn(10.0); Mockito.when(mockMLFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockMLFireInfo.getHeat()).thenReturn(3); Mockito.when(mockMLFireInfo.getExpectedDamageOnHit()).thenReturn(5.0); Mockito.when(mockLRMFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockLRMFireInfo.getHeat()).thenReturn(1); Mockito.when(mockLRMFireInfo.getExpectedDamageOnHit()).thenReturn(3.0); Mockito.doReturn(0.0).when(testFireControl).calcDamageAllocationUtility(Mockito.any(Targetable.class), Mockito.anyDouble()); Mockito.when(mockShooter.getPosition()).thenReturn(mockShooterCoords); Mockito.when(mockTarget.getPosition()).thenReturn(mockTargetCoords); Mockito.when(mockShooter.getWeaponList()).thenReturn(shooterWeapons); final FiringPlan plan = testFireControl.getBestFiringPlan(mockShooter, mockTarget, mockGame, testToHitThreshold); Assert.assertFalse("Expected not 0.0. Got " + plan.getUtility(), 0.00001 > Math.abs(0 - plan.getUtility())); } }
damage = damage * getProbabilityToHit();
final double toHitThreshold = ammoConservation.get(weapon); final WeaponFireInfo shoot = buildWeaponFireInfo(shooter, target, weapon, game, false); if ((shoot.getProbabilityToHit() > toHitThreshold)) { myPlan.add(shoot); continue; "\nTo Hit Chance (" + DECF.format(shoot.getProbabilityToHit()) + ") for " + weapon.getName() + " is less than threshold (" + DECF.format(toHitThreshold) + ")");
msg.append("\n\tHit Chance: ").append(LOG_PER.format(getProbabilityToHit())); setExpectedCriticals(ROLL_TWO * expectedCriticalHitCount * getProbabilityToHit()); setExpectedCriticals(getExpectedCriticals() + (hitLocationProbability * getProbabilityToHit())); if (Mech.LOC_CT == hitLocation) { setKillProbability(getKillProbability() + (hitLocationProbability * getProbabilityToHit())); } else if ((Mech.LOC_HEAD == hitLocation) && (Mech.COCKPIT_TORSO_MOUNTED != targetMech.getCockpitType())) { setKillProbability(getKillProbability() + (hitLocationProbability * getProbabilityToHit())); (hitLocationProbability * getProbabilityToHit() * expectedCriticalHitCount));
if(wfi.getProbabilityToHit() > 0) { damageValue *= wfi.getProbabilityToHit(); retval.setUtility(retval.getUtility() + tagInfo.getProbabilityToHit());
shooterWeapons.add(mockPPC); mockPPCFireInfo = Mockito.mock(WeaponFireInfo.class); Mockito.when(mockPPCFireInfo.getProbabilityToHit()).thenReturn(0.5); Mockito.doReturn(mockPPCFireInfo).when(testFireControl).buildWeaponFireInfo(Mockito.any(Entity.class), Mockito.any(EntityState.class), shooterWeapons.add(mockML); mockMLFireInfo = Mockito.mock(WeaponFireInfo.class); Mockito.when(mockMLFireInfo.getProbabilityToHit()).thenReturn(0.0); Mockito.doReturn(mockMLFireInfo).when(testFireControl).buildWeaponFireInfo(Mockito.any(Entity.class), Mockito.any(EntityState.class), shooterWeapons.add(mockLRM5); mockLRMFireInfo = Mockito.mock(WeaponFireInfo.class); Mockito.when(mockLRMFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.doReturn(mockLRMFireInfo).when(testFireControl).buildWeaponFireInfo(Mockito.any(Entity.class), Mockito.any(EntityState.class),
TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getMaxDamage()); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getExpectedDamageOnHit()); TestCase.assertEquals(expectedProbabilityToHit, testWeaponFireInfo.getProbabilityToHit(), DELTA); TestCase.assertEquals(expectedCriticals, testWeaponFireInfo.getExpectedCriticals(), DELTA); TestCase.assertEquals(expectedKill, testWeaponFireInfo.getKillProbability(), DELTA); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getMaxDamage()); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getExpectedDamageOnHit()); TestCase.assertEquals(expectedProbabilityToHit, testWeaponFireInfo.getProbabilityToHit(), DELTA); TestCase.assertEquals(expectedCriticals, testWeaponFireInfo.getExpectedCriticals(), DELTA); TestCase.assertEquals(expectedKill, testWeaponFireInfo.getKillProbability(), DELTA); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getMaxDamage()); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getExpectedDamageOnHit()); TestCase.assertEquals(expectedProbabilityToHit, testWeaponFireInfo.getProbabilityToHit(), DELTA); TestCase.assertEquals(expectedCriticals, testWeaponFireInfo.getExpectedCriticals(), DELTA); TestCase.assertEquals(expectedKill, testWeaponFireInfo.getKillProbability(), DELTA); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getMaxDamage()); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getExpectedDamageOnHit()); TestCase.assertEquals(expectedProbabilityToHit, testWeaponFireInfo.getProbabilityToHit(), DELTA); TestCase.assertEquals(expectedCriticals, testWeaponFireInfo.getExpectedCriticals(), DELTA); TestCase.assertEquals(expectedKill, testWeaponFireInfo.getKillProbability(), DELTA); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getMaxDamage()); TestCase.assertEquals(expectedMaxDamage, testWeaponFireInfo.getExpectedDamageOnHit()); TestCase.assertEquals(expectedProbabilityToHit, testWeaponFireInfo.getProbabilityToHit(), DELTA); TestCase.assertEquals(expectedCriticals, testWeaponFireInfo.getExpectedCriticals(), DELTA); TestCase.assertEquals(expectedKill, testWeaponFireInfo.getKillProbability(), DELTA);
Mockito.when(mockPPCFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockPPCFireInfo.getHeat()).thenReturn(10); Mockito.when(mockPPCFireInfo.getExpectedDamageOnHit()).thenReturn(10.0); alphaStrike.add(mockPPCFireInfo); Mockito.when(mockMLFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockMLFireInfo.getHeat()).thenReturn(3); Mockito.when(mockMLFireInfo.getExpectedDamageOnHit()).thenReturn(5.0); alphaStrike.add(mockMLFireInfo); Mockito.when(mockLRMFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockLRMFireInfo.getHeat()).thenReturn(1); Mockito.when(mockLRMFireInfo.getExpectedDamageOnHit()).thenReturn(3.0); shooterWeapons.add(mockMG); final WeaponFireInfo mockMGFireInfo = Mockito.mock(WeaponFireInfo.class); Mockito.when(mockMGFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockMGFireInfo.getHeat()).thenReturn(0); Mockito.when(mockMGFireInfo.getExpectedDamageOnHit()).thenReturn(2.0);
if (0 < shoot.getProbabilityToHit() && myPlan.getHeat() + shoot.getHeat() + shooter.getHeat() <= shooter.getHeatCapacity() && 0 < shoot.getExpectedDamage()) {
if (0 < shoot.getProbabilityToHit()) { myPlan.add(shoot);