Skip to content

Commit

Permalink
Adding a console method to evaluate nearby potential outposts to find…
Browse files Browse the repository at this point in the history
… the best ones. Currently a one size fits all with a guideline for "good" outpost efficiency hardcoded.
  • Loading branch information
Matthew Roy committed May 18, 2020
1 parent c1cccf3 commit 0875fb3
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 4 deletions.
41 changes: 40 additions & 1 deletion src/console/Console.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {Directive} from '../directives/Directive';
import {RoomIntel} from '../intel/RoomIntel';
import {Overlord} from '../overlords/Overlord';
import {ExpansionEvaluator} from '../strategy/ExpansionEvaluator';
import {Cartographer} from '../utilities/Cartographer';
import {EmpireAnalysis} from '../utilities/EmpireAnalysis';
import {alignedNewline, bullet} from '../utilities/stringConstants';
import {color, printRoomName, toColumns} from '../utilities/utils';
Expand Down Expand Up @@ -57,6 +58,7 @@ export class OvermindConsole {
global.getEmpireMineralDistribution = this.getEmpireMineralDistribution;
global.listPortals = this.listPortals;
global.evaluateOutpostEfficiencies = this.evaluateOutpostEfficiencies;
global.evaluatePotentialOutpostEfficiencies = this.evaluatePotentialOutpostEfficiencies;
}

// Help, information, and operational changes ======================================================================
Expand Down Expand Up @@ -106,6 +108,7 @@ export class OvermindConsole {
descr['getEmpireMineralDistribution()'] = 'returns current census of colonies and mined sk room minerals';
descr['getPortals(rangeFromColonies)'] = 'returns active portals within colony range';
descr['evaluateOutpostEfficiencies()'] = 'prints all colony outposts efficiency';
descr['evaluatePotentialOutpostEfficiencies()'] = 'prints all nearby unmined outposts';

// Console list
const descrMsg = toColumns(descr, {justify: true, padChar: '.'});
Expand Down Expand Up @@ -534,7 +537,7 @@ export class OvermindConsole {
colonies.forEach(colony => {
if (colony.bunker) {
colony.outposts.forEach(outpost => {
const res = ExpansionEvaluator.computeTheoreticalMiningEfficiency(colony.bunker!.anchor, outpost);
const res = ExpansionEvaluator.computeTheoreticalMiningEfficiency(colony.bunker!.anchor, outpost.name);
if (typeof res === 'boolean') {
log.error(`Failed on outpost ${outpost.print}`);
} else {
Expand All @@ -557,6 +560,42 @@ export class OvermindConsole {
return ret;
}

static evaluatePotentialOutpostEfficiencies(): string {
const colonies = getAllColonies();
const outpostEfficiencies: {[roomName: string]: number} = {};
let avgEnergyPerCPU = 0;

colonies.forEach(colony => {
if (colony.bunker) {
Cartographer.findRoomsInRange(colony.name, 2).forEach(outpost => {
if (!colony.outposts.map(room => room.name).includes(outpost)) {
const res = ExpansionEvaluator.computeTheoreticalMiningEfficiency(colony.bunker!.anchor, outpost);
if (typeof res === 'boolean') {
log.error(`Failed on outpost ${outpost}`);
} else {
outpostEfficiencies[outpost] = res;
avgEnergyPerCPU += res;
}
}
});
}
});

avgEnergyPerCPU = avgEnergyPerCPU/Object.keys(outpostEfficiencies).length;
let ret = `Possible new outposts above avg efficiency of ${avgEnergyPerCPU}: \n`;

for (const outpost in outpostEfficiencies) {
// 20E/cpu is a good guideline for an efficient room
if (outpostEfficiencies[outpost] > avgEnergyPerCPU*1.25 || outpostEfficiencies[outpost] > 20) {
ret += `${outpost} ${outpostEfficiencies[outpost]} \n`;
}
}

return ret;
}



// Memory management ===============================================================================================

static deepCleanMemory(): string {
Expand Down
7 changes: 4 additions & 3 deletions src/strategy/ExpansionEvaluator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,9 @@ export class ExpansionEvaluator {
* @param room
* @param verbose
*/
static computeTheoreticalMiningEfficiency(dropoffLocation: RoomPosition, room: Room, verbose = false): boolean|number {
const roomName = room.name;
static computeTheoreticalMiningEfficiency(dropoffLocation: RoomPosition, room: string, verbose = false)
: boolean|number {
const roomName = room;
const roomType = Cartographer.roomType(roomName);
let cpuCost = 0;
let creepEnergyCost = 0;
Expand Down Expand Up @@ -168,7 +169,7 @@ export class ExpansionEvaluator {

const netIncome = (energyPerSource*sourcePositions.length/ENERGY_REGEN_TIME)-creepEnergyCost;

let msg = `(Potential) Outpost ${room.print} type ${roomType} evaluated for colony at ${dropoffLocation.roomName} with per tick results \n`;
let msg = `(Potential) Outpost ${room} type ${roomType} evaluated for colony at ${dropoffLocation.roomName} with per tick results \n`;
msg += `Income: ${energyPerSource*sourcePositions.length/ENERGY_REGEN_TIME} Net Income: ${netIncome} Net Energy per CPU: ${netIncome/cpuCost}\n`;
msg += `Creep Costs: Energy ${creepEnergyCost}, Spawn Time ${spawnTimeCost}, and CPU ${cpuCost} \n`;
log.alert(msg);
Expand Down

0 comments on commit 0875fb3

Please sign in to comment.