Ejemplo n.º 1
0
 def activate_ts(self):
     self.label['nu'], self.widget['nu'] = create_widget(
         'labeled_combobox',
         master=self.frame_param,
         row=0,
         column=0,
         width=5,
         text=algo_config_map['surrogate']['nu'],
         values=[1, 3, 5, -1],
         class_type='int',
         return_label=True,
         default=5)
     self.label['n_spectral_pts'], self.widget[
         'n_spectral_pts'] = create_widget(
             'labeled_entry',
             master=self.frame_param,
             row=1,
             column=0,
             text=algo_config_map['surrogate']['n_spectral_pts'],
             class_type='int',
             return_label=True,
             default=100,
             valid_check=lambda x: x > 0,
             error_msg='number of spectral sampling points must be positive'
         )
     self.label['mean_sample'], self.widget['mean_sample'] = create_widget(
         'checkbutton',
         master=self.frame_param,
         row=2,
         column=0,
         text=algo_config_map['surrogate']['mean_sample'],
         return_label=True)
Ejemplo n.º 2
0
 def __init__(self, master, row, column):
     self.desc = {
         'name': 'Name',
         'type': 'Variable type',
         'n_var': 'Number of variables',
         'n_obj': 'Number of objectives',
         'n_constr': 'Number of constraints',
         'obj_type': 'Type of objectives',
     }
     self.widget = {}
     frame_info = create_widget('labeled_frame',
                                master=master,
                                row=row,
                                column=column,
                                text='Problem Info')
     frame_display = create_widget('frame',
                                   master=frame_info,
                                   row=0,
                                   column=0,
                                   padx=0)
     for row, key in enumerate(self.desc.keys()):
         self.widget[key] = create_widget('label',
                                          master=frame_display,
                                          row=row,
                                          column=0,
                                          pady=PADY / 2,
                                          text=f'{self.desc[key]}:')
Ejemplo n.º 3
0
    def create_constraint_widget(self):
        '''
        '''
        self.widget['constraint']['n_constr'] = create_widget(
            'labeled_entry',
            master=self.frame['constraint'],
            row=0,
            column=0,
            text='Number of constraints',
            class_type='int',
            default=0,
            valid_check=lambda x: x >= 0,
            error_msg='number cannot be negative')
        self.widget['constraint']['browse_constr_func'], self.widget[
            'constraint']['disp_constr_func'] = create_widget(
                'labeled_button_entry',
                master=self.frame['constraint'],
                row=1,
                column=0,
                label_text='Path to constraint function',
                button_text='Browse',
                width=30)

        def _set_constr_func():
            '''
            '''
            filename = tk.filedialog.askopenfilename(parent=self.window)
            if not isinstance(filename, str) or filename == '': return
            self.widget['constraint']['disp_constr_func'].set(filename)

        self.widget['constraint']['browse_constr_func'].configure(
            command=_set_constr_func)
Ejemplo n.º 4
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.window = create_widget('toplevel', master=self.root_view.root, title='Manage Problem')
        grid_configure(self.window, 0, 0)

        self.widget = {}

        frame_list = create_widget('labeled_frame', master=self.window, row=0, column=0, text='Problem list')
        frame_list_display = create_widget('frame', master=frame_list, row=0, column=0, sticky='N')
        frame_list_action = create_widget('frame', master=frame_list, row=1, column=0, padx=0, pady=0, sticky=None)
        frame_config = create_widget('frame', master=self.window, row=0, column=1, sticky=None, padx=0, pady=0)
        frame_config_display = create_widget('frame', master=frame_config, row=0, column=0, padx=0, pady=0, sticky='N')
        frame_config_action = create_widget('frame', master=frame_config, row=1, column=0, padx=0, pady=0, sticky=None)
        grid_configure(frame_list, 0, 0)
        grid_configure(frame_config, 0, 0)

        self.widget['list'] = Listbox(master=frame_list_display)
        self.widget['list'].grid()
        self.widget['create'] = create_widget('button', master=frame_list_action, row=0, column=0, text='Create')

        self.widget['info'] = ProblemInfo(master=frame_config_display, row=0, column=0)
        self.widget['update'] = create_widget('button', master=frame_config_action, row=0, column=0, text='Update')
        self.widget['delete'] = create_widget('button', master=frame_config_action, row=0, column=1, text='Delete')

        self.widget['update'].disable()
        self.widget['delete'].disable()
Ejemplo n.º 5
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.widget = {}
        self.label = {}

        self.frame = create_widget('frame',
                                   master=self.root_view.frame_surrogate,
                                   row=0,
                                   column=0)
        grid_configure(self.frame, None, 0)

        self.widget['name'] = create_widget(
            'labeled_combobox',
            master=self.frame,
            row=0,
            column=0,
            width=20,
            text=algo_config_map['surrogate']['name'],
            values=list(algo_value_map['surrogate']['name'].values()),
            required=True)

        self.create_frame_param()

        self.curr_name = None

        self.activate = {
            'Gaussian Process': self.activate_gp,
            'Thompson Sampling': self.activate_ts,
        }
        self.deactivate = {
            'Gaussian Process': self.deactivate_gp,
            'Thompson Sampling': self.deactivate_ts,
        }
Ejemplo n.º 6
0
    def __init__(self, root_view, columns):
        self.root_view = root_view
        self.root = self.root_view.root

        self.widget = {}

        frame_db = create_widget('frame',
                                 master=self.root_view.frame_db,
                                 row=0,
                                 column=0,
                                 padx=0,
                                 pady=0)
        self.widget['table'] = AdjustableTable(master=frame_db,
                                               columns=columns)

        frame_enter = create_widget('frame',
                                    master=frame_db,
                                    row=1,
                                    column=0,
                                    padx=0,
                                    pady=0)
        self.widget['enter_design'] = create_widget('button',
                                                    master=frame_enter,
                                                    row=0,
                                                    column=0,
                                                    text='Enter Design')
        self.widget['enter_performance'] = create_widget(
            'button',
            master=frame_enter,
            row=0,
            column=1,
            text='Enter Performance')
        self.widget['table'].widget['set'].grid(row=1, column=1)
Ejemplo n.º 7
0
    def __init__(self, root_view):
        self.window = create_widget('toplevel', master=root_view.root, title='Create Task')

        self.widget = {}
        self.widget['task_name'] = create_widget('labeled_entry', master=self.window, row=0, column=0, columnspan=2, 
            text='Task name', class_type='string', width=10, required=True)
        self.widget['create'] = create_widget('button', master=self.window, row=1, column=0, text='Create')
        self.widget['cancel'] = create_widget('button', master=self.window, row=1, column=1, text='Cancel')
Ejemplo n.º 8
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.window = create_widget('toplevel', master=self.root_view.root_view.root, title='Export Statistics')

        self.widget = {}
        self.widget['choice'] = create_widget('radiobutton',
            master=self.window, row=0, column=0, text_list=['Hypervolume', 'Model Error'], default='Hypervolume')

        frame_action = create_widget('frame', master=self.window, row=1, column=0, padx=0, pady=0, sticky=None)
        self.widget['export'] = create_widget('button', master=frame_action, row=0, column=0, text='Export')
        self.widget['cancel'] = create_widget('button', master=frame_action, row=0, column=1, text='Cancel')
Ejemplo n.º 9
0
 def create_frame_param(self):
     self.frame_param = create_widget('frame',
                                      master=self.frame,
                                      row=1,
                                      column=0,
                                      padx=0,
                                      pady=0,
                                      sticky='NSEW')
     grid_configure(self.frame_param, None, 0)
Ejemplo n.º 10
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.window = create_widget('toplevel',
                                    master=self.root_view.window,
                                    title='Advanced Settings')

        self.widget = {}
        self.cfg_widget = {}

        # parameter section
        frame_param_algo = create_widget('frame',
                                         master=self.window,
                                         row=0,
                                         column=0)
        self.nb_param = ttk.Notebook(master=frame_param_algo)
        self.nb_param.grid(row=0, column=0, sticky='NSEW')
        self.frame_surrogate = tk.Frame(master=self.nb_param)
        self.frame_acquisition = tk.Frame(master=self.nb_param)
        self.frame_solver = tk.Frame(master=self.nb_param)
        self.frame_selection = tk.Frame(master=self.nb_param)
        self.nb_param.add(child=self.frame_surrogate, text='Surrogate')
        self.nb_param.add(child=self.frame_acquisition, text='Acquisition')
        self.nb_param.add(child=self.frame_solver, text='Solver')
        self.nb_param.add(child=self.frame_selection, text='Selection')
        grid_configure(self.frame_surrogate, None, 0)
        grid_configure(self.frame_acquisition, None, 0)
        grid_configure(self.frame_solver, None, 0)
        grid_configure(self.frame_selection, None, 0)

        # action section
        frame_action = tk.Frame(master=self.window)
        frame_action.grid(row=1, column=0)
        self.widget['save'] = create_widget('button',
                                            master=frame_action,
                                            row=0,
                                            column=0,
                                            text='Save')
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 11
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.widget = {}

        self.frame = create_widget('frame',
                                   master=self.root_view.frame_acquisition,
                                   row=1,
                                   column=0)
        grid_configure(self.frame, None, 0)
        self.widget['name'] = create_widget(
            'labeled_combobox',
            master=self.frame,
            row=0,
            column=0,
            width=25,
            text=algo_config_map['acquisition']['name'],
            values=list(algo_value_map['acquisition']['name'].values()),
            required=True)
Ejemplo n.º 12
0
 def create_general_widget(self):
     '''
     '''
     self.widget['general']['name'] = create_widget(
         'labeled_entry',
         master=self.frame['general'],
         row=0,
         column=0,
         text='Problem name',
         class_type='string',
         width=10,
         required=True)
     self.widget['general']['type'] = create_widget(
         'labeled_combobox',
         master=self.frame['general'],
         row=1,
         column=0,
         text='Problem type',
         values=['continuous', 'integer', 'binary', 'categorical', 'mixed'],
         required=True)
Ejemplo n.º 13
0
    def __init__(self, root_view, lock):
        self.root_view = root_view

        title = 'Lock Entries' if lock else 'Release Entries'
        self.window = create_widget('toplevel',
                                    master=self.root_view.root,
                                    title=title)

        self.widget = {}

        frame_n_row = create_widget('frame',
                                    master=self.window,
                                    row=0,
                                    column=0,
                                    sticky=None,
                                    pady=0)
        self.widget['disp_n_row'] = create_widget('labeled_entry',
                                                  master=frame_n_row,
                                                  row=0,
                                                  column=0,
                                                  text='Number of rows',
                                                  class_type='int')
        self.widget['set_n_row'] = create_widget('button',
                                                 master=frame_n_row,
                                                 row=0,
                                                 column=1,
                                                 text='Update')

        self.widget['rowid_excel'] = Excel(master=self.window,
                                           rows=1,
                                           columns=1,
                                           width=10,
                                           title=['Row number'],
                                           dtype=[int],
                                           default=None,
                                           required=[True],
                                           required_mark=False)
        self.widget['rowid_excel'].grid(row=1, column=0)

        frame_action = create_widget('frame',
                                     master=self.window,
                                     row=2,
                                     column=0,
                                     sticky=None,
                                     pady=0)
        self.widget['start'] = create_widget(
            'button',
            master=frame_action,
            row=0,
            column=0,
            text='Lock' if lock else 'Release')
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 14
0
 def activate_gp(self):
     self.label['nu'], self.widget['nu'] = create_widget(
         'labeled_combobox',
         master=self.frame_param,
         row=0,
         column=0,
         width=5,
         text=algo_config_map['surrogate']['nu'],
         values=[1, 3, 5, -1],
         class_type='int',
         return_label=True,
         default=5)
Ejemplo n.º 15
0
    def __init__(self, root_view, n_obj):
        self.root_view = root_view

        self.window = create_widget('toplevel',
                                    master=self.root_view.root,
                                    title='Enter Performance')

        self.widget = {}

        frame_n_row = create_widget('frame',
                                    master=self.window,
                                    row=0,
                                    column=0,
                                    sticky=None,
                                    pady=0)
        self.widget['disp_n_row'] = create_widget('labeled_entry',
                                                  master=frame_n_row,
                                                  row=0,
                                                  column=0,
                                                  text='Number of rows',
                                                  class_type='int')
        self.widget['set_n_row'] = create_widget('button',
                                                 master=frame_n_row,
                                                 row=0,
                                                 column=1,
                                                 text='Update')

        self.widget['performance_excel'] = Excel(
            master=self.window,
            rows=1,
            columns=n_obj + 1,
            width=10,
            title=['Row number'] + [f'f{i + 1}' for i in range(n_obj)],
            dtype=[int] + [float] * n_obj,
            default=None,
            required=[True] * (n_obj + 1),
            required_mark=False)
        self.widget['performance_excel'].grid(row=1, column=0)

        frame_action = create_widget('frame',
                                     master=self.window,
                                     row=2,
                                     column=0,
                                     sticky=None,
                                     pady=0)
        self.widget['save'] = create_widget('button',
                                            master=frame_action,
                                            row=0,
                                            column=0,
                                            text='Save')
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 16
0
    def __init__(self, root_view):
        self.window = create_widget('toplevel',
                                    master=root_view.root,
                                    title='Remove Task')

        self.widget = {}
        self.widget['task_name'] = create_widget('labeled_combobox',
                                                 master=self.window,
                                                 row=0,
                                                 column=0,
                                                 columnspan=2,
                                                 text='Task name',
                                                 required=True)
        self.widget['remove'] = create_widget('button',
                                              master=self.window,
                                              row=1,
                                              column=0,
                                              text='Remove')
        self.widget['cancel'] = create_widget('button',
                                              master=self.window,
                                              row=1,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 17
0
    def __init__(self, master, columns):
        '''
        '''
        self.master = master
        self.widget = {}

        frame_table = create_widget('frame',
                                    master=master,
                                    row=0,
                                    column=0,
                                    columnspan=2,
                                    padx=0,
                                    pady=0)
        grid_configure(master, 0, 0)
        super().__init__(frame_table, columns)

        self.widget['set'] = create_widget('button',
                                           master=master,
                                           row=1,
                                           column=0,
                                           sticky='E',
                                           text='Display Settings',
                                           command=self.update_settings)
Ejemplo n.º 18
0
    def __init__(self, root):
        self.root = root

        frame_login = create_widget('frame', master=self.root, row=0, column=0)
        create_widget('logo', master=frame_login, row=0, column=0)

        self.widget = {}
        self.widget['ip'] = create_widget('labeled_entry',
                                          master=frame_login,
                                          row=1,
                                          column=0,
                                          width=20,
                                          text='Server IP Address',
                                          class_type='string',
                                          required=True,
                                          required_mark=False)
        self.widget['user'] = create_widget('labeled_entry',
                                            master=frame_login,
                                            row=2,
                                            column=0,
                                            width=20,
                                            text='Username',
                                            class_type='string',
                                            required=True,
                                            required_mark=False)
        self.widget['passwd'] = create_widget('labeled_entry',
                                              master=frame_login,
                                              row=3,
                                              column=0,
                                              width=20,
                                              text='Password',
                                              class_type='string',
                                              required=False)
        self.widget['task'] = create_widget('labeled_entry',
                                            master=frame_login,
                                            row=4,
                                            column=0,
                                            width=20,
                                            text='Task Name',
                                            class_type='string',
                                            required=True,
                                            required_mark=False)
        self.widget['login'] = create_widget('button',
                                             master=frame_login,
                                             row=5,
                                             column=0,
                                             text='Log in')
Ejemplo n.º 19
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.window = create_widget('toplevel',
                                    master=self.root_view.root_view.root,
                                    title='Export Figures')

        self.widget = {}
        self.widget['choice'] = create_widget('radiobutton',
                                              master=self.window,
                                              row=0,
                                              column=0,
                                              text_list=[
                                                  'Performance Space',
                                                  'Selected Design',
                                                  'Hypervolume', 'Model Error'
                                              ],
                                              default='Performance Space',
                                              orientation='vertical')

        frame_action = create_widget('frame',
                                     master=self.window,
                                     row=1,
                                     column=0,
                                     padx=0,
                                     pady=0,
                                     sticky=None)
        self.widget['export'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=0,
                                              text='Export')
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 20
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.widget = {}

        frame_log = create_widget('labeled_frame',
                                  master=self.root_view.root,
                                  row=2,
                                  column=1,
                                  text='Log')
        grid_configure(frame_log, 0, 0)

        # log display
        self.widget['log'] = create_widget('text',
                                           master=frame_log,
                                           row=0,
                                           column=0)
        self.widget['log'].disable()

        self.widget['clear'] = create_widget('button',
                                             master=frame_log,
                                             row=1,
                                             column=0,
                                             text='Clear')
Ejemplo n.º 21
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.window = create_widget('toplevel',
                                    master=self.root_view.root,
                                    title='Set Evaluation Program')

        self.widget = {}

        frame_program = create_widget('frame',
                                      master=self.window,
                                      row=0,
                                      column=0)
        self.widget['browse_obj_func'], self.widget[
            'disp_obj_func'] = create_widget(
                'labeled_button_entry',
                master=frame_program,
                row=0,
                column=0,
                label_text=config_map['problem']['obj_func'],
                button_text='Browse',
                width=30,
                required=True)

        frame_action = tk.Frame(master=self.window)
        frame_action.grid(row=1, column=0)
        self.widget['save'] = create_widget('button',
                                            master=frame_action,
                                            row=0,
                                            column=0,
                                            text='Save')
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 22
0
    def __init__(self, master):
        self.window = create_widget('toplevel',
                                    master=master,
                                    title='Display Settings')
        frame_settings = create_widget('frame',
                                       master=self.window,
                                       row=0,
                                       column=0,
                                       padx=0,
                                       pady=0)
        grid_configure(frame_settings, 1, 0)

        self.widget = {}

        self.widget['cellwidth'] = create_widget('spinbox',
                                                 master=frame_settings,
                                                 row=0,
                                                 column=0,
                                                 text='Cell width:',
                                                 from_=50,
                                                 to=300,
                                                 sticky='NSEW')
        self.widget['precision'] = create_widget('spinbox',
                                                 master=frame_settings,
                                                 row=1,
                                                 column=0,
                                                 text='Float precision:',
                                                 from_=0,
                                                 to=100,
                                                 sticky='NSEW')

        frame_action = create_widget('frame',
                                     master=frame_settings,
                                     row=2,
                                     column=0,
                                     padx=0,
                                     pady=0)
        grid_configure(frame_action, 0, 1)
        self.widget['update'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=0,
                                              text='Update')
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              row=0,
                                              column=1,
                                              text='Cancel')
Ejemplo n.º 23
0
    def show_version(self):

        window = create_widget('toplevel', master=self.menu, title='Version')
        create_widget('logo', master=window, row=0, column=0)
        create_widget('label',
                      master=window,
                      row=1,
                      column=0,
                      text=f'Version {VERSION}',
                      sticky=None)
        create_widget('label',
                      master=window,
                      row=2,
                      column=0,
                      text=COPYRIGHT,
                      sticky=None)
Ejemplo n.º 24
0
    def __init__(self, root_view, problem_cfg):
        self.root_view = root_view

        n_var, var_type = problem_cfg['n_var'], problem_cfg['type']

        var_type_map = {
            'continuous': float,
            'integer': int,
            'binary': int,
            'categorical': str,
            'mixed': object,
        }

        if var_type == 'mixed':
            dtype = []
            for var_info in problem_cfg['var'].values():
                dtype.append(var_type_map[var_info['type']])
        else:
            dtype = [var_type_map[var_type]] * n_var

        self.window = create_widget('toplevel', master=self.root_view.root, title='Enter Design Variables')

        self.widget = {}

        frame_n_row = create_widget('frame', master=self.window, row=0, column=0, sticky=None, pady=0)
        self.widget['disp_n_row'] = create_widget('labeled_entry',
            master=frame_n_row, row=0, column=0, text='Number of rows', class_type='int')
        self.widget['set_n_row'] = create_widget('button', master=frame_n_row, row=0, column=1, text='Update')

        self.widget['design_excel'] = Excel(master=self.window, rows=1, columns=n_var, width=10, 
            title=[f'x{i + 1}' for i in range(n_var)], dtype=dtype, required=[True] * n_var, required_mark=False)
        self.widget['design_excel'].grid(row=1, column=0)

        self.widget['eval_var'] = create_widget('checkbutton', master=self.window, row=2, column=0, text='Automatically evaluate')

        frame_action = create_widget('frame', master=self.window, row=3, column=0, sticky=None, pady=0)
        self.widget['save'] = create_widget('button', master=frame_action, row=0, column=0, text='Save')
        self.widget['cancel'] = create_widget('button', master=frame_action, row=0, column=1, text='Cancel')
Ejemplo n.º 25
0
    def __init__(self, root_view):
        self.root_view = root_view

        self.window = create_widget('toplevel', master=self.root_view.root, title='Stop Evaluation')

        self.widget = {}

        frame_n_row = create_widget('frame', master=self.window, row=0, column=0, sticky=None, pady=0)
        self.widget['disp_n_row'] = create_widget('labeled_entry',
            master=frame_n_row, row=0, column=0, text='Number of rows', class_type='int')
        self.widget['disp_n_row'].set(1)
        self.widget['set_n_row'] = create_widget('button', master=frame_n_row, row=0, column=1, text='Update')

        self.widget['rowid_excel'] = Excel(master=self.window, rows=1, columns=1, width=10, 
            title=['Row number'], dtype=[int], default=None, required=[True])
        self.widget['rowid_excel'].grid(row=1, column=0)

        frame_action = create_widget('frame', master=self.window, row=2, column=0, sticky=None, pady=0)
        self.widget['stop'] = create_widget('button', master=frame_action, row=0, column=0, text='Stop')
        self.widget['cancel'] = create_widget('button', master=frame_action, row=0, column=1, text='Cancel')
Ejemplo n.º 26
0
    def __init__(self, root_view, problem_cfg):
        self.root_view = root_view

        self.window = create_widget('toplevel',
                                    master=self.root_view.window,
                                    title='Set Reference Point')

        self.widget = {}

        frame_ref_point = create_widget('labeled_frame',
                                        master=self.window,
                                        text='Reference Point',
                                        row=0,
                                        column=0)
        frame_excel = create_widget('frame',
                                    master=frame_ref_point,
                                    row=0,
                                    column=0)
        self.widget['excel'] = Excel(master=frame_excel,
                                     rows=problem_cfg['n_obj'],
                                     columns=2,
                                     width=15,
                                     title=['Name', 'Reference Point'],
                                     dtype=[str, float])
        self.widget['excel'].grid(row=0, column=0)
        self.widget['excel'].set_column(0, problem_cfg['obj_name'])
        self.widget['excel'].disable_column(0)

        frame_action = create_widget('frame',
                                     master=self.window,
                                     row=1,
                                     column=0,
                                     padx=0,
                                     pady=0,
                                     sticky=None)
        self.widget['save'] = create_widget('button',
                                            master=frame_action,
                                            text='Save',
                                            row=0,
                                            column=0)
        self.widget['cancel'] = create_widget('button',
                                              master=frame_action,
                                              text='Cancel',
                                              row=0,
                                              column=1)
Ejemplo n.º 27
0
    def __init__(self, root):
        self.root = root

        frame_init = create_widget('frame', master=self.root, row=0, column=0)
        create_widget('logo', master=frame_init, row=0, column=0, columnspan=3)

        self.widget = {}
        self.widget['create_task'] = create_widget('button',
                                                   master=frame_init,
                                                   row=1,
                                                   column=0,
                                                   text='Create Task')
        self.widget['load_task'] = create_widget('button',
                                                 master=frame_init,
                                                 row=1,
                                                 column=1,
                                                 text='Load Task')
        self.widget['remove_task'] = create_widget('button',
                                                   master=frame_init,
                                                   row=1,
                                                   column=2,
                                                   text='Remove Task')
Ejemplo n.º 28
0
    def __init__(self, root_view):
        self.root_view = root_view

        # control overall frame
        frame_control = create_widget('labeled_frame',
                                      master=self.root_view.root,
                                      row=1,
                                      column=1,
                                      text='Control')
        grid_configure(frame_control, 2, 0)

        self.widget = {}
        self.widget['mode'] = create_widget('radiobutton',
                                            master=frame_control,
                                            row=0,
                                            column=0,
                                            text_list=['Manual', 'Auto'],
                                            default='Manual')
        self.widget['batch_size'] = create_widget(
            'labeled_entry',
            master=frame_control,
            row=1,
            column=0,
            text=config_map['experiment']['batch_size'],
            class_type='int',
            required=True,
            required_mark=False)

        frame_manual = create_widget('frame',
                                     master=frame_control,
                                     row=2,
                                     column=0,
                                     padx=0,
                                     pady=0)
        frame_auto = create_widget('frame',
                                   master=frame_control,
                                   row=2,
                                   column=0,
                                   padx=0,
                                   pady=0)
        grid_configure(frame_manual, 0, 1)
        grid_configure(frame_auto, 1, 1)
        frame_auto.grid_remove()

        def set_manual():
            frame_auto.grid_remove()
            frame_manual.grid()

        def set_auto():
            frame_manual.grid_remove()
            frame_auto.grid()

        for text, button in self.widget['mode'].widget.items():
            if text == 'Manual':
                button.configure(command=set_manual)
            elif text == 'Auto':
                button.configure(command=set_auto)
            else:
                raise Exception()

        self.widget['set_stop_cri'] = create_widget(
            'labeled_button',
            master=frame_auto,
            row=0,
            column=0,
            columnspan=2,
            label_text='Stopping criterion',
            button_text='Set',
            pady=5)

        for key in ['mode', 'batch_size', 'set_stop_cri']:
            self.widget[key].disable()

        # optimization command
        self.widget['optimize_manual'] = create_widget('button',
                                                       master=frame_manual,
                                                       row=0,
                                                       column=0,
                                                       text='Optimize')
        self.widget['optimize_manual'].disable()
        self.widget['optimize_auto'] = create_widget('button',
                                                     master=frame_auto,
                                                     row=1,
                                                     column=0,
                                                     text='Optimize')
        self.widget['optimize_auto'].disable()

        # stop optimization command
        self.widget['stop_manual'] = create_widget('button',
                                                   master=frame_manual,
                                                   row=0,
                                                   column=1,
                                                   text='Stop')
        self.widget['stop_manual'].disable()
        self.widget['stop_auto'] = create_widget('button',
                                                 master=frame_auto,
                                                 row=1,
                                                 column=1,
                                                 text='Stop')
        self.widget['stop_auto'].disable()
Ejemplo n.º 29
0
    def __init__(self, root_view, first_time):
        self.root_view = root_view
        self.first_time = first_time

        title = 'Create Configurations' if self.first_time else 'Change Configurations'
        self.window = create_widget('toplevel', master=self.root_view.root, title=title)

        self.widget = {}

        # parameter section
        frame_param = tk.Frame(master=self.window)
        frame_param.grid(row=0, column=0)
        grid_configure(frame_param, 2, 0)

        # problem subsection
        frame_problem = create_widget('labeled_frame', master=frame_param, row=0, column=0, text='Problem')
        grid_configure(frame_problem, 0, 0)

        self.widget['problem_name'] = create_widget('labeled_combobox', 
            master=frame_problem, row=0, column=0, text=config_map['problem']['name'], values=get_problem_list(), width=15, required=True)
        self.widget['set_ref_point'] = create_widget('button',
            master=frame_problem, row=1, column=0, text='Set Reference Point', sticky=None)
        self.widget['set_ref_point'].disable()

        # algorithm subsection
        frame_algorithm = create_widget('labeled_frame', master=frame_param, row=1, column=0, text='Algorithm')
        grid_configure(frame_algorithm, 0, 0)
        self.widget['algo_name'] = create_widget('labeled_combobox', 
            master=frame_algorithm, row=0, column=0, text=config_map['algorithm']['name'], values=get_algorithm_list(), required=True)
        self.widget['n_process'] = create_widget('labeled_entry', 
            master=frame_algorithm, row=1, column=0, text=config_map['algorithm']['n_process'], class_type='int', default=cpu_count(),
            valid_check=lambda x: x > 0, error_msg='number of processes to use must be positive')
        self.widget['set_advanced'] = create_widget('button', master=frame_algorithm, row=2, column=0, text='Advanced Settings', sticky=None)
        
        # initialization subsection
        if self.first_time:
            frame_init = create_widget('labeled_frame', master=frame_param, row=2, column=0, text='Initialization')
            grid_configure(frame_init, 1, 0)

            self.widget['init_type'] = create_widget('radiobutton',
                master=frame_init, row=0, column=0, text_list=['Random', 'Provided'], default='Random')

            frame_random_init = create_widget('frame', master=frame_init, row=1, column=0, padx=0, pady=0)
            frame_provided_init = create_widget('frame', master=frame_init, row=1, column=0, padx=0, pady=0)

            self.widget['n_init'] = create_widget('labeled_entry', 
                master=frame_random_init, row=0, column=0, text=config_map['experiment']['n_random_sample'], class_type='int', required=True,
                valid_check=lambda x: x > 0, error_msg='number of random initial samples must be positive')

            self.widget['set_x_init'], self.widget['disp_x_init'] = create_widget('labeled_button_entry',
                master=frame_provided_init, row=0, column=0, label_text='Path of initial design variables', button_text='Browse', width=30, required=True,
                valid_check=lambda x: os.path.exists(x), error_msg='file does not exist')
            self.widget['set_y_init'], self.widget['disp_y_init'] = create_widget('labeled_button_entry',
                master=frame_provided_init, row=1, column=0, label_text='Path of initial performance values', button_text='Browse', width=30,
                valid_check=lambda x: os.path.exists(x), error_msg='file does not exist')

            def set_random_init():
                frame_provided_init.grid_remove()
                frame_random_init.grid()

            def set_provided_init():
                frame_random_init.grid_remove()
                frame_provided_init.grid()

            for text, button in self.widget['init_type'].widget.items():
                if text == 'Random':
                    button.configure(command=set_random_init)
                elif text == 'Provided':
                    button.configure(command=set_provided_init)
                else:
                    raise Exception()

            set_random_init()

        # evaluation subsection
        frame_experiment = create_widget('labeled_frame', master=frame_param, row=3 if self.first_time else 2, column=0, text='Experiment')
        grid_configure(frame_experiment, 0, 0)
        self.widget['n_worker'] = create_widget('labeled_entry',
            master=frame_experiment, row=0, column=0, text=config_map['experiment']['n_worker'], class_type='int', default=1,
            valid_check=lambda x: x > 0, error_msg='max number of evaluation workers must be positive')

        # action section
        frame_action = tk.Frame(master=self.window)
        frame_action.grid(row=1, column=0, columnspan=3)
        self.widget['save'] = create_widget('button', master=frame_action, row=0, column=0, text='Save')
        self.widget['cancel'] = create_widget('button', master=frame_action, row=0, column=1, text='Cancel')

        self.cfg_widget = {
            'problem': {
                'name': self.widget['problem_name'],
            },
            'algorithm': {
                'name': self.widget['algo_name'],
                'n_process': self.widget['n_process'],
            },
            'experiment': {
                'n_worker': self.widget['n_worker'],
            }
        }
Ejemplo n.º 30
0
    def __init__(self, root_view, problem_cfg):
        self.root_view = root_view

        self.n_var, self.n_obj = problem_cfg['n_var'], problem_cfg['n_obj']
        self.var_name, self.obj_name = problem_cfg['var_name'], problem_cfg[
            'obj_name']
        var_type = problem_cfg['type']

        # compute lower and upper bound for design space radar plot
        if var_type in ['continuous', 'integer']:
            var_lb, var_ub = problem_cfg['var_lb'], problem_cfg['var_ub']
            if type(var_lb) in [int, float]:
                var_lb = [var_lb] * self.n_var
            if type(var_ub) in [int, float]:
                var_ub = [var_ub] * self.n_var
        elif var_type == 'binary':
            var_lb, var_ub = [0] * self.n_var, [1] * self.n_var
        elif var_type == 'categorical':
            var_lb = [0] * self.n_var
            if 'var' in problem_cfg:
                var_ub = []
                for var_info in problem_cfg['var'].values():
                    var_ub.append(len(var_info['choices']))
            else:
                var_ub = [len(problem_cfg['var_choices'])] * self.n_var
        elif var_type == 'mixed':
            var_lb, var_ub = [], []
            var_type_list = []
            for var_info in problem_cfg['var'].values():
                var_type_list.append(var_info['type'])
                if var_info['type'] in ['continuous', 'integer']:
                    var_lb.append(var_info['lb'])
                    var_ub.append(var_info['ub'])
                elif var_info['type'] == 'binary':
                    var_lb.append(0)
                    var_ub.append(1)
                elif var_info['type'] == 'categorical':
                    var_lb.append(0)
                    var_ub.append(len(var_info['choices']))
                else:
                    raise Exception(
                        f'invalid variable type {var_info["type"]}')
        else:
            raise Exception(f'invalid problem type {problem_cfg["type"]}')

        self.var_lb, self.var_ub = np.array(var_lb), np.array(var_ub)

        # figure placeholder in GUI
        self.fig = plt.figure(dpi=FIGURE_DPI)
        self.gs = GridSpec(1, 2, figure=self.fig, width_ratios=[3, 2])

        # connect matplotlib figure with tkinter GUI
        embed_figure(self.fig, self.root_view.frame_plot)

        # performance space figure
        if self.n_obj == 2:
            self.ax1 = self.fig.add_subplot(self.gs[0])
        elif self.n_obj == 3:
            self.ax1 = self.fig.add_subplot(self.gs[0], projection='3d')
        else:
            raise NotImplementedError
        self.ax1.set_title('Performance Space')
        self.ax1.set_xlabel(self.obj_name[0])
        self.ax1.set_ylabel(self.obj_name[1])
        if self.n_obj == 3:
            self.ax1.set_zlabel(self.obj_name[2])

        # design space figure
        if self.n_var > 2:
            self.theta = radar_factory(self.n_var)
            self.ax2 = self.fig.add_subplot(self.gs[1], projection='radar')
            self.ax2.set_xticks(self.theta)
            self.ax2.set_varlabels(self.var_name)
            self.ax2.set_yticklabels([])
            self.ax2.set_title('Selected Design', position=(0.5, 1.1))
            self.ax2.set_ylim(0, 1)
        else:
            self.ax2 = self.fig.add_subplot(self.gs[1])
            for spine in self.ax2.spines.values():
                spine.set_visible(False)
            self.ax2.get_xaxis().set_ticks([])
            self.ax2.get_yaxis().set_ticks([])
            self.xticks = [0] if self.n_var == 1 else [-1, 1]
            self.ax2.bar(self.xticks, [1] * self.n_var, color='g', alpha=0.2)
            self.ax2.set_xticks(self.xticks)
            self.text_lb = [None] * self.n_var
            self.text_ub = [None] * self.n_var
            for i in range(self.n_var):
                if var_type in [
                        'continuous', 'integer'
                ] or (var_type == 'mixed'
                      and var_type_list[i] in ['continuous', 'integer']):
                    self.text_lb[i] = self.ax2.text(
                        self.xticks[i] - 0.5,
                        0,
                        f'{self.var_lb[i]:.4g}',
                        horizontalalignment='right',
                        verticalalignment='center')
                    self.text_ub[i] = self.ax2.text(
                        self.xticks[i] - 0.5,
                        1,
                        f'{self.var_ub[i]:.4g}',
                        horizontalalignment='right',
                        verticalalignment='center')
            self.ax2.set_xticklabels(self.var_name)
            self.ax2.set_title('Selected Design')
            self.ax2.set_xlim(-3, 3)
            self.ax2.set_ylim(0, 1.04)

        # configure slider widget
        frame_slider = create_widget('frame',
                                     master=self.root_view.frame_plot,
                                     row=2,
                                     column=0,
                                     pady=0)
        grid_configure(frame_slider, [0], [1])

        label_iter = tk.Label(master=frame_slider, text='Iteration:')
        label_iter.grid(row=0, column=0, sticky='EW')
        self.curr_iter = tk.IntVar()
        self.scale_iter = tk.Scale(master=frame_slider,
                                   orient=tk.HORIZONTAL,
                                   variable=self.curr_iter,
                                   from_=0,
                                   to=0)
        self.scale_iter.grid(row=0, column=1, sticky='EW')