def _get_sum_worker_params(self, list_workers): result_params = Worker_params() for worker in list_workers: result_params += worker.get_worker_params() result_params += self.city_buffer result_params.apply_cap(self.skill_cap) return result_params
def OnChoice(self, event): current_choice = event.GetEventObject() current_worker_name = current_choice.GetString( current_choice.GetSelection()) if current_worker_name != "": wl = WorkerLoader(current_worker_name) worker_params = wl.get_worker().get_worker_params() choice_id = current_choice.Name self._set_worker_values(worker_params, choice_id) else: worker_params = Worker_params() choice_id = current_choice.Name worker_params.set_null() self._set_worker_values(worker_params, choice_id) return
def OnButtonForward(self, event): self._reset_all_tc_background_color() item_name = self.item_internal_name il = ItemLoader(item_name) item = il.get_item() worker_name_level_list = self._get_worker_name_level_list() city_buffer = self._get_city_buffer() list_worker_params = [] worker_params = Worker_params() for i in range(0, 8): wp = self._get_worker_params_from_gui("cb_%s" % (i)) list_worker_params.append(wp) worker_params += wp onspc = Optimal_next_skill_point_calculator(item, worker_name_level_list, list_worker_params, city_buffer) next_indice, craft_time, mastery_rate = onspc.run() if next_indice is not None: tc_to_add = self._get_tc_by_name( "tc_%s_%s" % (next_indice[0], next_indice[1] + 1)) tc_to_add.SetBackgroundColour((114, 233, 177)) tc_to_add.Refresh() else: wx.MessageBox("Already used all points", "Message", wx.OK | wx.ICON_INFORMATION) self._update_results(craft_time, mastery_rate) return
def get_worker_params(self): result = Worker_params({"textile":self.textile, "armor":self.armor, "metal":self.metal, "weapon":self.weapon, "wood":self.wood, "alchemy":self.alchemy, "magic":self.magic, "tinker":self.tinker, "jewel":self.jewel, "arts_crafts":self.arts_crafts, "rune":self.rune, "mastery":self.mastery}) return result
def OnButtonRun(self, event): item_name = self.item_internal_name worker_name_level_list = self._get_worker_name_level_list() if self.tc_total_points.GetValue().isdigit(): total_skill_points = int(self.tc_total_points.GetValue()) else: total_skill_points = 3000 il = ItemLoader(item_name) item = il.get_item() city_buffer = self._get_city_buffer() octc = Optimial_craft_time_calculator(item, worker_name_level_list, total_skill_points, city_buffer) list_workers, time_craft, points_left, mastery_rate = octc.run() worker_params = Worker_params() for idx, worker in enumerate(list_workers): worker_params += worker.get_worker_params() self._set_worker_values(worker.get_worker_params(), "cb_%s" % (idx)) self._update_results(time_craft[-1], mastery_rate[-1]) self._update_config(worker_name_level_list) #start plot fig, ax1 = plt.subplots() ax1.plot(time_craft, color="r") ax2 = ax1.twinx() ax2.plot(np.array(mastery_rate)[:, 0], color="g", linestyle="--") ax2.plot(np.array(mastery_rate)[:, 1], color="b", linestyle="--") ax2.plot(np.array(mastery_rate)[:, 2], color="c", linestyle="--") ax2.plot(np.array(mastery_rate)[:, 3], color="purple", linestyle="--") ax2.plot(np.array(mastery_rate)[:, 4], color="orange", linestyle="--") ax1.set_xlabel("Points added") ax1.set_ylabel("Craft time [min]") ax2.set_ylabel("Percentage [%]") plt.grid() plt.show()
def run(self): time_craft = None mastery_rate = None lggo = LargestGlobalGradientOptimizer(self.item, self.list_workers, self.city_buffer) next_indice = lggo.get_next_indices() sum_w_param = Worker_params() for worker in self.list_workers: sum_w_param += worker.get_worker_params() time_craft = self.item.getCraftTime(sum_w_param + self.city_buffer) total_mastery = 0 for worker in self.list_workers: total_mastery += worker.get_available_mastery() mastery_rate = self._get_mastery_rate(total_mastery) return next_indice, time_craft, mastery_rate
def run(self): list_results = [] list_tried_wokers = [] for i in range(0, self.n): worker_params = Worker_params() new_worker_list = self._random() for worker in new_worker_list: worker_params += worker.get_worker_params() list_results.append(self.item.getCraftTime(worker_params)) list_tried_wokers.append(new_worker_list) import matplotlib.pyplot as plt print(np.min(list_results)) for w in list_tried_wokers[np.argmin(list_results)]: print(w) plt.hist(list_results, bins=np.arange(0, 2000, 10)) plt.show()
def __init__(self, params): self.textile = 0 self.armor = 0 self.metal = 0 self.weapon = 0 self.wood = 0 self.alchemy = 0 self.magic = 0 self.tinker = 0 self.jewel = 0 self.arts_crafts = 0 self.rune = 0 self.mastery = 0 self.params = params self._parse_property(params) self.init_params = Worker_params() self.level = 0 self.skill_per_level = 0
def run(self): time_craft = [] points_left = [] mastery_rate = [] for i in range(0, self.total_investigated_skill_points): #50*12*8 lggo = LargestGlobalGradientOptimizer(self.item, self.list_workers,\ self.city_buffer) lggo.run() self.list_workers = lggo.worker_list sum_w_param = Worker_params() for worker in self.list_workers: sum_w_param += worker.get_worker_params() time_craft.append( self.item.getCraftTime(sum_w_param + self.city_buffer)) total_mastery = 0 for worker in self.list_workers: total_mastery += worker.get_available_mastery() mastery_rate.append(self._get_mastery_rate(total_mastery)) ## old method: # current_worker = self.list_workers[i%len(self.list_workers)] # rest_worker_params = [w.get_worker_params() for idx,w in\ # enumerate(self.list_workers) if idx != i%8] # sum_w_param = Worker_params() # for w_param in rest_worker_params: # sum_w_param = sum_w_param + w_param # lgo = LargestGradientOptimizer(self.item, current_worker, sum_w_param) # lgo.run() # self.list_workers[i%8] = lgo.worker # time_craft.append(self.item.getCraftTime(sum_w_param+lgo.worker.get_worker_params())) # total_mastery = 0 # for worker in self.list_workers: # total_mastery += worker.get_available_mastery() # mastery_rate.append(self._get_mastery_rate(total_mastery)) return self.list_workers, time_craft, points_left, mastery_rate
def _get_worker_params_from_gui(self, choice_id): worker_params = Worker_params() ctrl_1_name = "tc_%s_%s" % (choice_id.split("_")[-1], 1) worker_params.textile = self._get_skill_value_from_cb(ctrl_1_name) ctrl_2_name = "tc_%s_%s" % (choice_id.split("_")[-1], 2) worker_params.armor = self._get_skill_value_from_cb(ctrl_2_name) ctrl_3_name = "tc_%s_%s" % (choice_id.split("_")[-1], 3) worker_params.metal = self._get_skill_value_from_cb(ctrl_3_name) ctrl_4_name = "tc_%s_%s" % (choice_id.split("_")[-1], 4) worker_params.weapon = self._get_skill_value_from_cb(ctrl_4_name) ctrl_5_name = "tc_%s_%s" % (choice_id.split("_")[-1], 5) worker_params.wood = self._get_skill_value_from_cb(ctrl_5_name) ctrl_6_name = "tc_%s_%s" % (choice_id.split("_")[-1], 6) worker_params.alchemy = self._get_skill_value_from_cb(ctrl_6_name) ctrl_7_name = "tc_%s_%s" % (choice_id.split("_")[-1], 7) worker_params.magic = self._get_skill_value_from_cb(ctrl_7_name) ctrl_8_name = "tc_%s_%s" % (choice_id.split("_")[-1], 8) worker_params.tinker = self._get_skill_value_from_cb(ctrl_8_name) ctrl_9_name = "tc_%s_%s" % (choice_id.split("_")[-1], 9) worker_params.jewel = self._get_skill_value_from_cb(ctrl_9_name) ctrl_10_name = "tc_%s_%s" % (choice_id.split("_")[-1], 10) worker_params.arts_crafts = self._get_skill_value_from_cb(ctrl_10_name) ctrl_11_name = "tc_%s_%s" % (choice_id.split("_")[-1], 11) worker_params.rune = self._get_skill_value_from_cb(ctrl_11_name) return worker_params
def _get_worker_parameters(self): worker_params = Worker_params({"textile":-1, "armor":-1, "metal":-1, "weapon":-1, "wood":-1, "alchemy":-1, "magic":-1, "tinker":-1, "jewel":-1, "arts_crafts":-1, "rune":-1, "mastery":0}) for k in self.worker_data.keys(): if k.startswith("skill"): if self.worker_data[k][0] == 'textile-working': worker_params.textile = self.worker_data[k][1] elif self.worker_data[k][0] == "armor-crafting": worker_params.armor = self.worker_data[k][1] elif self.worker_data[k][0] == 'metal-working': worker_params.metal = self.worker_data[k][1] elif self.worker_data[k][0] == "weapon-crafting": worker_params.weapon = self.worker_data[k][1] elif self.worker_data[k][0] == "wood-working": worker_params.wood = self.worker_data[k][1] elif self.worker_data[k][0] == "alchemy": worker_params.alchemy = self.worker_data[k][1] elif self.worker_data[k][0] == "magic": worker_params.magic = self.worker_data[k][1] elif self.worker_data[k][0] == "tinkering": worker_params.tinker = self.worker_data[k][1] elif self.worker_data[k][0] == "jewelry": worker_params.jewel = self.worker_data[k][1] elif self.worker_data[k][0] == "arts-and-crafts": worker_params.arts_crafts = self.worker_data[k][1] elif self.worker_data[k][0] == "rune-writing": worker_params.rune = self.worker_data[k][1] if k == "mastery": worker_params.mastery = self.worker_data[k] return worker_params
def __init__(self, *args): Worker_params.__init__(self, *args)
import sys import os sys.path.append( os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))) from shop_heroes_module.Worker_params import Worker_params class City_buffer(Worker_params): def __init__(self, *args): Worker_params.__init__(self, *args) if __name__ == "__main__": wp = Worker_params() print(wp)