示例#1
0
 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
示例#2
0
 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
示例#3
0
    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
示例#5
0
    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()
示例#6
0
    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
示例#7
0
    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
示例#9
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
示例#10
0
    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
示例#11
0
    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)