本文整理汇总了Python中ProductionAI.cur_best_military_design_rating方法的典型用法代码示例。如果您正苦于以下问题:Python ProductionAI.cur_best_military_design_rating方法的具体用法?Python ProductionAI.cur_best_military_design_rating怎么用?Python ProductionAI.cur_best_military_design_rating使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProductionAI
的用法示例。
在下文中一共展示了ProductionAI.cur_best_military_design_rating方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: cur_best_mil_ship_rating
# 需要导入模块: import ProductionAI [as 别名]
# 或者: from ProductionAI import cur_best_military_design_rating [as 别名]
def cur_best_mil_ship_rating(include_designs=False):
"""Find the best military ship we have available in this turn and return its rating.
:param include_designs: toggles if available designs are considered or only existing ships
:return: float: rating of the best ship
"""
current_turn = fo.currentTurn()
if current_turn in best_ship_rating_cache:
best_rating = best_ship_rating_cache[current_turn]
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return best_rating
best_rating = 0.001
universe = fo.getUniverse()
for fleet_id in FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY):
fleet = universe.getFleet(fleet_id)
for ship_id in fleet.shipIDs:
ship = universe.getShip(ship_id)
if ship:
ship_info = [(ship.id, ship.designID, ship.speciesName)]
ship_rating = foAI.foAIstate.rate_psuedo_fleet(ship_info=ship_info)['overall']
best_rating = max(best_rating, ship_rating)
best_ship_rating_cache[current_turn] = best_rating
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return max(best_rating, 0.001)
示例2: cur_best_mil_ship_rating
# 需要导入模块: import ProductionAI [as 别名]
# 或者: from ProductionAI import cur_best_military_design_rating [as 别名]
def cur_best_mil_ship_rating(include_designs=False):
"""Find the best military ship we have available in this turn and return its rating.
:param include_designs: toggles if available designs are considered or only existing ships
:return: float: rating of the best ship
"""
current_turn = fo.currentTurn()
if current_turn in _best_ship_rating_cache:
best_rating = _best_ship_rating_cache[current_turn]
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return best_rating
best_rating = 0.001
universe = fo.getUniverse()
for fleet_id in FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.MILITARY):
fleet = universe.getFleet(fleet_id)
for ship_id in fleet.shipIDs:
ship_rating = CombatRatingsAI.ShipCombatStats(ship_id).get_rating(enemy_stats=foAI.foAIstate.get_standard_enemy())
best_rating = max(best_rating, ship_rating)
_best_ship_rating_cache[current_turn] = best_rating
if include_designs:
best_design_rating = ProductionAI.cur_best_military_design_rating()
best_rating = max(best_rating, best_design_rating)
return max(best_rating, 0.001)
示例3: _calculate_military_priority
# 需要导入模块: import ProductionAI [as 别名]
# 或者: from ProductionAI import cur_best_military_design_rating [as 别名]
def _calculate_military_priority():
"""Calculates the demand for military ships by military targeted systems."""
global unmetThreat
universe = fo.getUniverse()
capital_id = PlanetUtilsAI.get_capital()
if capital_id is None or capital_id == INVALID_ID:
return 0 # no capitol (not even a capitol-in-the-making), means can't produce any ships
have_l1_weaps = (tech_is_complete("SHP_WEAPON_1_4") or
(tech_is_complete("SHP_WEAPON_1_3") and tech_is_complete("SHP_MIL_ROBO_CONT")) or
tech_is_complete("SHP_WEAPON_2_1") or
tech_is_complete("SHP_WEAPON_4_1"))
have_l2_weaps = (tech_is_complete("SHP_WEAPON_2_3") or
tech_is_complete("SHP_WEAPON_4_1"))
enemies_sighted = foAI.foAIstate.misc.get('enemies_sighted', {})
allotted_invasion_targets = 1 + int(fo.currentTurn()/25)
target_planet_ids = [pid for pid, pscore, trp in AIstate.invasionTargets[:allotted_invasion_targets]] + [pid for pid, pscore in foAI.foAIstate.colonisablePlanetIDs.items()[:allottedColonyTargets]] + [pid for pid, pscore in foAI.foAIstate.colonisableOutpostIDs.items()[:allottedColonyTargets]]
my_systems = set(AIstate.popCtrSystemIDs).union(AIstate.outpostSystemIDs)
target_systems = set(PlanetUtilsAI.get_systems(target_planet_ids))
cur_ship_rating = ProductionAI.cur_best_military_design_rating()
current_turn = fo.currentTurn()
ships_needed = 0
defense_ships_needed = 0
ships_needed_allocation = []
for sys_id in my_systems.union(target_systems):
status = foAI.foAIstate.systemStatus.get(sys_id, {})
my_rating = status.get('myFleetRating', 0)
my_defenses = status.get('mydefenses', {}).get('overall', 0)
base_monster_threat = status.get('monsterThreat', 0)
# scale monster threat so that in early - mid game big monsters don't over-drive military production
monster_threat = base_monster_threat
if current_turn > 200:
pass
elif current_turn > 100:
if base_monster_threat >= 2000:
monster_threat = 2000 + (current_turn / 100.0 - 1) * (base_monster_threat - 2000)
elif current_turn > 30:
if base_monster_threat >= 2000:
monster_threat = 0
else:
if base_monster_threat > 200:
monster_threat = 0
if sys_id in my_systems:
threat_root = status.get('fleetThreat', 0)**0.5 + 0.8*status.get('max_neighbor_threat', 0)**0.5 + 0.2*status.get('neighborThreat', 0)**0.5 + monster_threat**0.5 + status.get('planetThreat', 0)**0.5
else:
threat_root = status.get('fleetThreat', 0)**0.5 + monster_threat**0.5 + status.get('planetThreat', 0)**0.5
ships_needed_here = math.ceil((max(0, (threat_root - (my_rating ** 0.5 + my_defenses ** 0.5))) ** 2) / cur_ship_rating)
ships_needed += ships_needed_here
ships_needed_allocation.append((universe.getSystem(sys_id), ships_needed_here))
if sys_id in my_systems:
defense_ships_needed += ships_needed_here
part1 = min(1 * fo.currentTurn(), 40)
part2 = max(0, int(75 * ships_needed))
military_priority = part1 + part2
if not have_l1_weaps:
military_priority /= 2.0
elif not (have_l2_weaps and enemies_sighted):
military_priority /= 1.5
fmt_string = "Calculating Military Priority: min(t,40) + max(0,75 * ships_needed) \n\t Priority: %d \t ships_needed: %d \t defense_ships_needed: %d \t curShipRating: %.0f \t l1_weaps: %s \t enemies_sighted: %s"
print fmt_string % (military_priority, ships_needed, defense_ships_needed, cur_ship_rating, have_l1_weaps, enemies_sighted)
print "Source of milship demand: ", ships_needed_allocation
military_priority *= foAI.foAIstate.character.military_priority_scaling()
return max(military_priority, 0)
示例4: calculateMilitaryPriority
# 需要导入模块: import ProductionAI [as 别名]
# 或者: from ProductionAI import cur_best_military_design_rating [as 别名]
def calculateMilitaryPriority():
"""calculates the demand for military ships by military targeted systems"""
global unmetThreat
universe = fo.getUniverse()
empire = fo.getEmpire()
empireID = empire.empireID
capitalID = PlanetUtilsAI.get_capital()
if capitalID is not None and capitalID != -1:
homeworld = universe.getPlanet(capitalID)
else:
return 0 # no capitol (not even a capitol-in-the-making), means can't produce any ships
have_l1_weaps = (
tech_is_complete("SHP_WEAPON_1_4")
or (tech_is_complete("SHP_WEAPON_1_3") and tech_is_complete("SHP_MIL_ROBO_CONT"))
or tech_is_complete("SHP_WEAPON_2_1")
or tech_is_complete("SHP_WEAPON_4_1")
)
have_l2_weaps = tech_is_complete("SHP_WEAPON_2_3") or tech_is_complete("SHP_WEAPON_4_1")
enemies_sighted = foAI.foAIstate.misc.get("enemies_sighted", {})
allottedInvasionTargets = 1 + int(fo.currentTurn() / 25)
targetPlanetIDs = (
[pid for pid, pscore, trp in AIstate.invasionTargets[:allottedInvasionTargets]]
+ [pid for pid, pscore in foAI.foAIstate.colonisablePlanetIDs.items()[:allottedColonyTargets]]
+ [pid for pid, pscore in foAI.foAIstate.colonisableOutpostIDs.items()[:allottedColonyTargets]]
)
mySystems = set(AIstate.popCtrSystemIDs).union(AIstate.outpostSystemIDs)
targetSystems = set(PlanetUtilsAI.get_systems(targetPlanetIDs))
curShipRating = ProductionAI.cur_best_military_design_rating()
cSRR = curShipRating ** 0.5
defense_ships_needed = 0
currentTurn = fo.currentTurn()
ships_needed = 0
defense_ships_needed = 0
ships_needed_allocation = []
for sysID in mySystems.union(targetSystems):
status = foAI.foAIstate.systemStatus.get(sysID, {})
myRating = status.get("myFleetRating", 0)
my_defenses = status.get("mydefenses", {}).get("overall", 0)
baseMonsterThreat = status.get("monsterThreat", 0)
# scale monster threat so that in early - mid game big monsters don't over-drive military production
monsterThreat = baseMonsterThreat
if currentTurn > 200:
pass
elif currentTurn > 100:
if baseMonsterThreat >= 2000:
monsterThreat = 2000 + (currentTurn / 100.0 - 1) * (baseMonsterThreat - 2000)
elif currentTurn > 30:
if baseMonsterThreat >= 2000:
monsterThreat = 0
else:
if baseMonsterThreat > 200:
monsterThreat = 0
if sysID in mySystems:
threatRoot = (
status.get("fleetThreat", 0) ** 0.5
+ 0.8 * status.get("max_neighbor_threat", 0) ** 0.5
+ 0.2 * status.get("neighborThreat", 0) ** 0.5
+ monsterThreat ** 0.5
+ status.get("planetThreat", 0) ** 0.5
)
else:
threatRoot = (
status.get("fleetThreat", 0) ** 0.5 + monsterThreat ** 0.5 + status.get("planetThreat", 0) ** 0.5
)
ships_needed_here = math.ceil(
(max(0, (threatRoot - (myRating ** 0.5 + my_defenses ** 0.5))) ** 2) / curShipRating
)
ships_needed += ships_needed_here
ships_needed_allocation.append((sysID, ships_needed_here))
if sysID in mySystems:
defense_ships_needed += ships_needed_here
part1 = min(1 * fo.currentTurn(), 40)
part2 = max(0, int(75 * ships_needed))
militaryPriority = part1 + part2
if not have_l1_weaps:
militaryPriority /= 2.0
elif not (have_l2_weaps and enemies_sighted):
militaryPriority /= 1.5
fmt_string = "Calculating Military Priority: min(t,40) + max(0,75 * ships_needed) \n\t Priority: %d \t ships_needed: %d \t defense_ships_needed: %d \t curShipRating: %.0f \t l1_weaps: %s \t enemies_sighted: %s"
print fmt_string % (
militaryPriority,
ships_needed,
defense_ships_needed,
curShipRating,
have_l1_weaps,
enemies_sighted,
)
print "Source of milship demand: ", ships_needed_allocation
if foAI.foAIstate.aggression < fo.aggression.typical:
militaryPriority *= (1.0 + foAI.foAIstate.aggression) / (1.0 + fo.aggression.typical)
return max(militaryPriority, 0)