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)
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]}:')
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)
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()
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, }
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)
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')
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')
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)
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')
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)
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)
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')
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)
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')
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')
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)
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')
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')
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')
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')
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')
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)
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')
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')
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)
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')
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()
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'], } }
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')