X-Git-Url: http://git.scottworley.com/planeteer/blobdiff_plain/fb8eccbfa74c0ac19f24d40cbc3b7e660eda9eeb..60025e5d0cf49e88a7c727b756c5ce96ec729969:/planeteer.go diff --git a/planeteer.go b/planeteer.go index e3c04cf..f4a64aa 100644 --- a/planeteer.go +++ b/planeteer.go @@ -43,6 +43,8 @@ var fuel = flag.Int("fuel", 16, "Hyper Jump power left") var hold = flag.Int("hold", 300, "Size of your cargo hold") +var start_hold = flag.String("start_hold", "", "Start with a hold full of cargo") + var start_edens = flag.Int("start_edens", 0, "How many Eden Warp Units are you starting with?") @@ -63,6 +65,9 @@ var battery_price = flag.Int("battery_price", 0, "Today's Shield Battery price") var visit_string = flag.String("visit", "", "A comma-separated list of planets to make sure to visit") +var tomorrow_weight = flag.Float64("tomorrow_weight", 1.0, + "Weight for the expected value of tomorrow's trading. 0.0 - 1.0") + var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") var visit_cache []string @@ -111,8 +116,9 @@ type Commodity struct { Limit int } type Planet struct { - BeaconOn bool - Private bool + BeaconOn bool + Private bool + TomorrowValue int /* Use relative prices rather than absolute prices because you can get relative prices without traveling to each planet. */ RelativePrices map[string]int @@ -283,7 +289,9 @@ func CreateStateTable(data planet_data, dims []int) []State { addr[Fuel] = *fuel addr[Edens] = *start_edens addr[Location] = data.p2i[*start] - addr[Traded] = 1 + if *start_hold != "" { + addr[Hold] = data.c2i[*start_hold] + } start_index := EncodeIndex(dims, addr) table[start_index].value = int32(*funds) table[start_index].from = FROM_ROOT @@ -520,7 +528,7 @@ func CellValue(data planet_data, dims []int, table []State, addr []int) int32 { // UI: Progress bar cell_filled_count++ - if cell_filled_count&0xff == 0 { + if cell_filled_count&0xfff == 0 { print(fmt.Sprintf("\r%3.1f%%", 100*float64(cell_filled_count)/float64(StateTableSize(dims)))) } @@ -538,16 +546,19 @@ func FindBestState(data planet_data, dims []int, table []State) int32 { addr[Hold] = 0 addr[UnusedCargo] = 0 max_index := int32(-1) - max_value := int32(0) + max_value := 0.0 max_fuel := 1 if *fuel == 0 { max_fuel = 0 } for addr[Fuel] = 0; addr[Fuel] <= max_fuel; addr[Fuel]++ { for addr[Location] = 0; addr[Location] < dims[Location]; addr[Location]++ { - if len(end()) == 0 || end()[data.i2p[addr[Location]]] { + planet := data.i2p[addr[Location]] + if len(end()) == 0 || end()[planet] { index := EncodeIndex(dims, addr) - value := CellValue(data, dims, table, addr) + today_value := CellValue(data, dims, table, addr) + tomorrow_value := *tomorrow_weight * float64(*hold+data.Planets[planet].TomorrowValue) + value := float64(today_value) + tomorrow_value if value > max_value { max_value = value max_index = index