class MainWindow(QWidget): """ Main window class for capraz_sevkiyat project """ def __init__(self): QWidget.__init__(self) self.model = None self.setWindowTitle("Capraz Sevkiyat Projesi") self.setGeometry(400,400,400,400) self.set_buttons() self.set_layout() self.truck_image_list = {} self.truckDataWindow = None self.data = DataStore() self.model = None self.current_iteration = 1 self.iteration_limit = 100 self.current_data_set = 0 self.algorithms = None self.solution_choice = None self.scn = QGraphicsScene() self.simulation = GraphView(self.scn) def set_buttons(self): self.new_data_set_button = QPushButton('New Data Set') self.load_data_set_button = QPushButton('Load Data Set') self.save_data_set_button = QPushButton('Save Data Set') self.truck_data_button = QPushButton('Truck Data') self.system_data_button = QPushButton('System Data') self.algorithm_data_button = QPushButton('Algorithm Data') self.generate_data_set_button = QPushButton('Generate Data Set') self.show_data_button = QPushButton('Show Data Set') self.print_gams_button = QPushButton('Print gams output') self.data_set_ready_button = QPushButton('Data Set Ready') self.solve_step_button = QPushButton('Solve Next Step') self.solve_iteration_button = QPushButton('Solve Next Iteration') self.solve_next_data_set_button = QPushButton('Solve Next Data Set') self.show_debug_logger_button = QPushButton('Show Debug Logger') self.show_logger_button = QPushButton('Show Logger') self.show_simulation_button = QPushButton('Show Simulation') self.show_data_table = QPushButton('Show Run Time Data Table') self.data_set_number = QSpinBox() self.data_set_number.setMinimum(0) self.new_data_set_button.clicked.connect(self.new_data_set) self.load_data_set_button.clicked.connect(self.load_data) self.save_data_set_button.clicked.connect(self.save_data) self.truck_data_button.clicked.connect(self.show_truck_data) self.system_data_button.clicked.connect(self.show_system_data) self.algorithm_data_button.clicked.connect(self.show_algorithm_data) self.generate_data_set_button.clicked.connect(self.generate_data_set) self.show_data_button.clicked.connect(self.show_data) self.print_gams_button.clicked.connect(self.print_gams) self.data_set_ready_button.clicked.connect(self.data_set_ready) self.show_logger_button.clicked.connect(self.show_logger) self.show_data_table.clicked.connect(self.show_runtime_table) self.solve_next_data_set_button.clicked.connect(self.data_set_button) self.solve_iteration_button.clicked.connect(self.iteration_button) self.solve_step_button.clicked.connect(self.step_button) self.data_set_number.valueChanged.connect(self.set_data_set_number) def set_layout(self): self.data_set_layout = QGridLayout() self.data_set_layout.addWidget(self.new_data_set_button, 1 ,1) self.data_set_layout.addWidget(self.load_data_set_button, 1 ,2) self.data_set_layout.addWidget(self.save_data_set_button, 1 ,3) self.data_set_layout.addWidget(self.truck_data_button, 2 ,1) self.data_set_layout.addWidget(self.system_data_button, 2 ,2) self.data_set_layout.addWidget(self.algorithm_data_button, 2 ,3) self.data_set_layout.addWidget(self.generate_data_set_button, 3, 1) self.data_set_layout.addWidget(self.show_data_button, 3, 2) self.data_set_layout.addWidget(self.print_gams_button, 3, 3) self.data_set_layout.addWidget(self.data_set_ready_button, 4, 1) self.solver_layout = QGridLayout() self.solver_layout.addWidget(self.solve_step_button, 1, 1) self.solver_layout.addWidget(self.solve_iteration_button, 1, 2) self.solver_layout.addWidget(self.solve_next_data_set_button, 1, 3) self.solver_layout.addWidget(self.data_set_number, 1, 4) self.interaction_layout = QGridLayout() self.interaction_layout.addWidget(self.show_logger_button, 1, 1) self.interaction_layout.addWidget(self.show_debug_logger_button, 1, 2) self.interaction_layout.addWidget(self.show_simulation_button, 1, 3) self.interaction_layout.addWidget(self.show_data_table, 1, 4) self.layout = QVBoxLayout() self.layout.addLayout(self.data_set_layout) self.layout.addLayout(self.solver_layout) self.layout.addLayout(self.interaction_layout) self.setLayout(self.layout) self.pause_bool = False def new_data_set(self): """ :return: """ self.data = DataStore() def load_data(self): """ loads prev saved data :return: """ file_name, _ = QFileDialog.getOpenFileName(self, 'Open file', '/home') self.data = pickle.load(open(file_name, 'rb')) def save_data(self): """ saves current data :return: """ file_name, _ = QFileDialog.getSaveFileName(self, 'Save file', '/home') pickle.dump(self.data, open(file_name, 'wb')) def generate_data_set(self): # ask if sure self.data.arrival_times = [] self.data.boundaries = [] self.model = Solver(self.data) for i in range(len(self.data.data_set_list)): self.model.current_data_set = i self.model.set_data() def show_data(self): self.data_show = ShowData(self.data) self.data_show.exec_() def print_gams(self): file_name, _ = QFileDialog.getSaveFileName(self, 'Open file', '/home') for i in range(len(self.data.data_set_list)): gams_writer(file_name + str(i), i, self.data ) def show_truck_data(self): """ shows data about the trucks :return: """ self.truckDataWindow = TruckDataWindow(self.data) self.truckDataWindow.exec_() def show_system_data(self): """ shows data set :return: """ self.dataWindow = DataSetWindow(self.data) self.dataWindow.exec_() def show_algorithm_data(self): pass def data_set_ready(self): #enable solve buttons self.algorithms = Algorithms() self.model = Solver(self.data) self.model.current_data_set = self.current_data_set self.model.load_data_set() self.algorithms.set_algorithms(self.model) self.current_iteration = 1 self.iteration_limit = 100 self.simulation.init_image(self.model) self.simulation.show() def show_logger(self): self.logger = LogData() root = logging.getLogger() root.setLevel(logging.INFO) ch = logging.StreamHandler(self.logger) ch.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) root.addHandler(ch) self.logger.show() logging.info('Logger Started') def data_set_button(self): self.solution_choice = 'data_set' self.solution_type_choice() self.solve_dataset() def iteration_button(self): self.solution_choice = 'iteration' self.solution_type_choice() self.solve_dataset() def step_button(self): self.solution_choice = 'step' self.solution_type_choice() self.solve_dataset() def set_data_set_number(self): self.current_data_set = self.data_set_number.value() def solve_dataset(self): """ solves one data set :return: """ logging.info('Data Set Number: {0}'.format(self.current_data_set)) self.model.current_data_set = self.current_data_set if self.data_set_bool: #print('one_set')1 if self.current_iteration == 1 and self.model.current_time == 0: self.model.load_data_set() self.solve_iteration() if self.current_data_set == len(self.data.data_set_list): # print('finish') self.current_iteration = 1 self.current_data_set = 0 self.trial_time = 0 else: while self.current_data_set < len(self.data.data_set_list): if self.pause_bool: break self.model.load_data_set() self.solve_iteration() # print(self.current_data_set) self.current_data_set = 0 def show_runtime_table(self): """ shows data table of the :return: """ self.runtime_table = TruckDataTable(self.algorithms, self.model) self.runtime_table.show() def solve_iteration(self): """ solves one iteration :return: """ if self.iteration_bool: if self.model.current_time == 0: if self.current_iteration == 1: self.algorithms.start() self.model.set_sequence(self.algorithms.solution_sequence) self.solve_whole_step() self.model.reset() self.algorithms.next() self.model.set_sequence(self.algorithms.solution_sequence) else: self.algorithms.next() self.model.set_sequence(self.algorithms.solution_sequence) self.solve_step() if self.current_iteration == self.iteration_limit: self.log_results() self.current_iteration = 1 else: while self.current_iteration < self.iteration_limit: if self.pause_bool: break if self.model.current_time == 0: if self.current_iteration == 1: self.algorithms.start() else: self.algorithms.next() self.model.set_sequence(self.algorithms.solution_sequence) # next sequence self.solve_step() self.current_iteration = 1 self.log_results() def solve_step(self): if self.step_bool: self.solve_one_step() else: self.solve_whole_step() def solve_whole_step(self): """ solves one iterations :return: """ while not self.model.finish: # if self.model.current_time > 800: # # break if self.pause_bool: break self.model.next_step() #finished for truck in itertools.chain(self.model.outbound_trucks.values(), self.model.compound_trucks.values()): truck.calculate_error() if self.runtime_table: self.runtime_table.update_tables() self.runtime_table.activateWindow() #add reset self.model.finish = False self.algorithms.solution_sequence['error'] = self.add_errors() self.model.reset() if self.current_iteration > 1: self.algorithms.calculate() self.current_iteration += 1 def solve_one_step(self): """ goes one time step forward :return: """ self.model.next_step() self.simulation.update_image() if self.runtime_table: self.runtime_table.update_tables() self.runtime_table.activateWindow() if self.model.finish: #finished for truck in self.model.outbound_trucks.values(): truck.calculate_error() self.model.reset() # add reset self.add_errors() self.current_iteration += 1 self.model.finish = False self.algorithms.solution_sequence['error'] = self.add_errors() self.algorithms.calculate() def add_errors(self): """ adds absolute values of the errors :return: """ total_error = 0 for truck in itertools.chain(self.model.outbound_trucks.values(), self.model.compound_trucks.values()): total_error += abs(truck.error) logging.info("Error: {0}\n".format(total_error)) return total_error def simulation_cycle(self): i = 0 for inbound_trucks in self.model.inbound_trucks.values(): truck_name = inbound_trucks.truck_name self.truck_image_list[truck_name] = self.scn.addPixmap(self.truckPixmap) self.truck_image_list[truck_name].scale(0.2,0.2) self.truck_image_list[truck_name].setPos(-600,i*100) i = i +1 self.simulation.show() def solution_type_choice(self): """ update bools for the choosen solution type :return: """ if self.solution_choice == 'solve': self.solve_bool = True self.data_set_bool = False self.iteration_bool = False self.step_bool = False elif self.solution_choice == 'data_set': self.solve_bool = True self.data_set_bool = True self.iteration_bool = False self.step_bool = False self.data_set_ready() elif self.solution_choice == 'iteration': self.solve_bool = True self.data_set_bool = True self.iteration_bool = True self.step_bool = False elif self.solution_choice == 'step': self.solve_bool = True self.data_set_bool = True self.iteration_bool = True self.step_bool = True def print_simulation_data(self): logging.info("Iteration Number: {0}\n".format(self.current_iteration)) logging.info("Inbound Sequence: {0}\n".format(self.algorithms.solution_sequence['inbound'])) logging.info("Outbound Sequence: {0}\n".format(self.algorithms.solution_sequence['outbound'])) logging.info("Error value: {0}\n".format(self.algorithms.solution_sequence['error'])) def log_results(self): logging.info("Best result:") logging.info("Inbound Sequence: {0}\n".format(self.algorithms.best_sequence['inbound'])) logging.info("Outbound Sequence: {0}\n".format(self.algorithms.best_sequence['outbound'])) logging.info("Error value: {0}\n".format(self.algorithms.best_sequence['error']))
def show_data(self): self.data_show = ShowData(self.data) self.data_show.exec_()
class MainWindow(QWidget): """ Main window with control buttons logger and running output """ def __init__(self): QWidget.__init__(self) self.setWindowTitle("Cross Docking Project") self.data = DataStore() self.set_buttons() self.set_logger() self.set_layout() self.algorithm_list = {'annealing1': Annealing1} self.algorithm_name = 'annealing1' self.current_data_set_number = 0 # add these to gui self.number_of_iterations = 200 def set_buttons(self): """ set buttons for the main gui :return: """ self.new_data_set_button = QPushButton('New Data Set') self.new_data_set_button.clicked.connect(self.new_data_set) self.load_data_set_button = QPushButton('Load Data Set') self.load_data_set_button.clicked.connect(self.load_data) self.save_data_set_button = QPushButton('Save Data Set') self.save_data_set_button.clicked.connect(self.save_data) self.truck_data_button = QPushButton('Truck Data') self.truck_data_button.clicked.connect(self.show_truck_data_window) self.system_data_button = QPushButton('System Data') self.system_data_button.clicked.connect(self.show_data_set_window) self.algorithm_data_button = QPushButton('Algorithm Data') self.generate_data_set_button = QPushButton('Generate Data Set') self.generate_data_set_button.clicked.connect(self.generate_data_set) self.show_data_button = QPushButton('Show Data Set') self.show_data_button.clicked.connect(self.show_data_window) self.print_gams_button = QPushButton('Print gams output') self.print_gams_button.clicked.connect(self.print_gams) self.data_set_ready_button = QPushButton('Setup Data Set') self.data_set_ready_button.clicked.connect(self.setup_data_set) self.solve_step_button = QPushButton('Solve Next Step') self.solve_step_button.clicked.connect(self.solve_step) self.solve_step_button.setEnabled(False) self.solve_iteration_button = QPushButton('Solve Next Iteration') self.solve_iteration_button.clicked.connect(self.solve_iteration) self.solve_iteration_button.setEnabled(False) self.solve_data_set_button = QPushButton('Solve Data Set') self.solve_data_set_button.setEnabled(False) self.solve_data_set_button.clicked.connect(self.solve_data_set) self.solve_sequence_button = QPushButton('Solve a given sequence') self.solve_data_set_button.setEnabled(True) self.solve_sequence_button.clicked.connect(self.solve_sequence) self.show_solution_button = QPushButton('Show Best Solution') self.show_solution_button.setEnabled(False) self.show_solution_button.clicked.connect(self.show_solution) self.show_sequences_button = QPushButton('Show Sequences') self.show_sequences_button.setEnabled(False) self.show_sequences_button.clicked.connect(self.show_sequences) self.show_logger_button = QPushButton('Show Logger') self.show_simulation_button = QPushButton('Show Simulation') self.show_data_table = QPushButton('Show Run Time Data Table') self.debug_check = QCheckBox('Debug Mode') self.debug_check.stateChanged.connect(self.set_logger_output) self.data_set_number = QSpinBox() self.data_set_number.setMinimum(1) self.data_set_number.valueChanged.connect(self.set_data_set_number) def set_logger(self): """ setup logger with info output and a channel forward to screen output :return: """ self.logger = LogData() self.logger_root = logging.getLogger() self.logger_root.setLevel(logging.INFO) self.logger_ch = logging.StreamHandler(self.logger) self.logger_ch.setLevel(logging.INFO) self.logger_root.addHandler(self.logger_ch) def set_layout(self): """ set layout of the main screen :return: """ self.data_set_layout = QGridLayout() self.data_set_layout.addWidget(self.new_data_set_button, 1, 1) self.data_set_layout.addWidget(self.load_data_set_button, 1, 2) self.data_set_layout.addWidget(self.save_data_set_button, 1, 3) self.data_set_layout.addWidget(self.debug_check, 1, 4) self.data_set_layout.addWidget(self.truck_data_button, 2, 1) self.data_set_layout.addWidget(self.system_data_button, 2, 2) self.data_set_layout.addWidget(self.algorithm_data_button, 2, 3) self.data_set_layout.addWidget(self.generate_data_set_button, 3, 1) self.data_set_layout.addWidget(self.show_data_button, 3, 2) self.data_set_layout.addWidget(self.print_gams_button, 3, 3) self.data_set_layout.addWidget(self.data_set_ready_button, 4, 1) self.data_set_layout.addWidget(self.data_set_number, 4, 2) self.solver_layout = QGridLayout() self.solver_layout.addWidget(self.solve_step_button, 1, 1) self.solver_layout.addWidget(self.solve_iteration_button, 1, 2) self.solver_layout.addWidget(self.solve_data_set_button, 1, 3) self.solver_layout.addWidget(self.solve_sequence_button, 1, 4) self.solver_layout.addWidget(self.show_solution_button, 2, 1) self.interaction_layout = QGridLayout() self.interaction_layout.addWidget(self.show_logger_button, 1, 1) self.interaction_layout.addWidget(self.show_simulation_button, 1, 3) self.interaction_layout.addWidget(self.show_data_table, 1, 4) self.button_layout = QVBoxLayout() self.button_layout.addLayout(self.data_set_layout) self.button_layout.addLayout(self.solver_layout) # self.button_layout.addLayout(self.interaction_layout) self.layout = QGridLayout() self.layout.addLayout(self.button_layout, 1, 1) self.layout.addWidget(self.logger, 1, 2) self.setLayout(self.layout) def set_logger_output(self, state): """ setup logger output between info and debug depending on the check box on main screen :param state: :return: """ if state == Qt.Checked: self.logger_root.setLevel(logging.DEBUG) self.logger_ch.setLevel(logging.DEBUG) logging.info("Debug Mode") else: self.logger_root.setLevel(logging.INFO) self.logger_ch.setLevel(logging.INFO) logging.info("Normal Mode") def new_data_set(self): """ new data set """ self.data = DataStore() logging.debug('New Data Set') def load_data(self): """ loads prev saved data :return: """ file_name, _ = QFileDialog.getOpenFileName(self, 'Open file', '/home') try: self.data = pickle.load(open(file_name, 'rb')) logging.info('Loaded file: {0}'.format(file_name)) except Exception as e: logging.info(e) def save_data(self): """ saves current data :return: """ file_name, _ = QFileDialog.getSaveFileName(self, 'Save file', '/home') try: pickle.dump(self.data, open(file_name, 'wb')) logging.info('Saved to file: {0}'.format(file_name)) except Exception as e: logging.info(e) def show_truck_data_window(self): self.truck_data_window = TruckDataWindow(self.data) self.truck_data_window.exec_() def show_data_set_window(self): self.data_set_window = DataSetWindow(self.data) self.data_set_window.exec_() def show_data_window(self): self.data_window = ShowData(self.data) self.data_window.exec_() def generate_data_set(self): # ask if sure self.data.arrival_times = [] self.data.boundaries = [] self.model = Solver(self.data) for i in range(len(self.data.data_set_list)): self.model.current_data_set = i self.model.set_data() def print_gams(self): file_name, _ = QFileDialog.getSaveFileName(self, 'Open file', '/home') for i in range(len(self.data.data_set_list)): gams_writer(file_name + str(i), i, self.data) def set_data_set_number(self): self.current_data_set_number = self.data_set_number.value() - 1 def setup_data_set(self): # setup for one data set self.model = Solver(self.data) self.model.current_data_set = self.current_data_set_number self.model.load_data_set() self.algorithm = self.algorithm_list[self.algorithm_name]( self.number_of_iterations, self.current_data_set_number, self.model, self.data) logging.info("Solving using {0} data set {1}".format( self.algorithm_name, self.current_data_set_number + 1)) logging.info("Nuber of iterations {0}".format( self.number_of_iterations)) self.solve_step_button.setEnabled(True) self.solve_iteration_button.setEnabled(True) self.solve_data_set_button.setEnabled(True) self.solve_sequence_button.setEnabled(True) self.show_solution_button.setEnabled(True) self.show_sequences_button.setEnabled(True) def solve_step(self): self.algorithm.step_mode = True self.algorithm.solve() def solve_iteration(self): self.algorithm.step_mode = False self.algorithm.solve() def solve_data_set(self): self.algorithm.solve_data_set() def solve_sequence(self): logging.info( '--------------------Solving one sequence---------------------------------' ) self.set_sequence = SetSequence(self.data) self.set_sequence.exec_() sequence = self.set_sequence.set_sequence() sequence.print_sequence() self.one_time_model = Solver(self.data) self.one_time_model.current_data_set = self.current_data_set_number self.one_time_model.load_data_set() self.one_time_model.set_sequence(sequence) while not self.one_time_model.finish: self.one_time_model.next_step() total_error = 0 for truck in itertools.chain( self.one_time_model.outbound_trucks.values(), self.one_time_model.compound_trucks.values()): truck.calculate_error() logging.info("Truck {0}, error {1}\n".format( truck.truck_name, truck.error)) total_error += abs(truck.error) logging.info("Error: {0}\n".format(total_error)) def show_solution(self): pass def show_sequences(self): pass
def show_data_window(self): self.data_window = ShowData(self.data) self.data_window.exec_()
class MainWindow(QWidget): """ Main window with control buttons logger and running output """ def __init__(self): QWidget.__init__(self) self.setWindowTitle("Cross Docking Project") self.data = DataStore() self.set_buttons() self.set_logger() self.set_layout() self.algorithm_list = {"annealing1": Annealing1} self.algorithm_name = "annealing1" self.current_data_set_number = 0 # add these to gui self.number_of_iterations = 200 def set_buttons(self): """ set buttons for the main gui :return: """ self.new_data_set_button = QPushButton("New Data Set") self.new_data_set_button.clicked.connect(self.new_data_set) self.load_data_set_button = QPushButton("Load Data Set") self.load_data_set_button.clicked.connect(self.load_data) self.save_data_set_button = QPushButton("Save Data Set") self.save_data_set_button.clicked.connect(self.save_data) self.truck_data_button = QPushButton("Truck Data") self.truck_data_button.clicked.connect(self.show_truck_data_window) self.system_data_button = QPushButton("System Data") self.system_data_button.clicked.connect(self.show_data_set_window) self.algorithm_data_button = QPushButton("Algorithm Data") self.generate_data_set_button = QPushButton("Generate Data Set") self.generate_data_set_button.clicked.connect(self.generate_data_set) self.show_data_button = QPushButton("Show Data Set") self.show_data_button.clicked.connect(self.show_data_window) self.print_gams_button = QPushButton("Print gams output") self.print_gams_button.clicked.connect(self.print_gams) self.data_set_ready_button = QPushButton("Setup Data Set") self.data_set_ready_button.clicked.connect(self.setup_data_set) self.solve_step_button = QPushButton("Solve Next Step") self.solve_step_button.clicked.connect(self.solve_step) self.solve_step_button.setEnabled(False) self.solve_iteration_button = QPushButton("Solve Next Iteration") self.solve_iteration_button.clicked.connect(self.solve_iteration) self.solve_iteration_button.setEnabled(False) self.solve_data_set_button = QPushButton("Solve Data Set") self.solve_data_set_button.setEnabled(False) self.solve_data_set_button.clicked.connect(self.solve_data_set) self.solve_sequence_button = QPushButton("Solve a given sequence") self.solve_data_set_button.setEnabled(True) self.solve_sequence_button.clicked.connect(self.solve_sequence) self.show_solution_button = QPushButton("Show Best Solution") self.show_solution_button.setEnabled(False) self.show_solution_button.clicked.connect(self.show_solution) self.show_sequences_button = QPushButton("Show Sequences") self.show_sequences_button.setEnabled(False) self.show_sequences_button.clicked.connect(self.show_sequences) self.show_logger_button = QPushButton("Show Logger") self.show_simulation_button = QPushButton("Show Simulation") self.show_data_table = QPushButton("Show Run Time Data Table") self.debug_check = QCheckBox("Debug Mode") self.debug_check.stateChanged.connect(self.set_logger_output) self.data_set_number = QSpinBox() self.data_set_number.setMinimum(1) self.data_set_number.valueChanged.connect(self.set_data_set_number) def set_logger(self): """ setup logger with info output and a channel forward to screen output :return: """ self.logger = LogData() self.logger_root = logging.getLogger() self.logger_root.setLevel(logging.INFO) self.logger_ch = logging.StreamHandler(self.logger) self.logger_ch.setLevel(logging.INFO) self.logger_root.addHandler(self.logger_ch) def set_layout(self): """ set layout of the main screen :return: """ self.data_set_layout = QGridLayout() self.data_set_layout.addWidget(self.new_data_set_button, 1, 1) self.data_set_layout.addWidget(self.load_data_set_button, 1, 2) self.data_set_layout.addWidget(self.save_data_set_button, 1, 3) self.data_set_layout.addWidget(self.debug_check, 1, 4) self.data_set_layout.addWidget(self.truck_data_button, 2, 1) self.data_set_layout.addWidget(self.system_data_button, 2, 2) self.data_set_layout.addWidget(self.algorithm_data_button, 2, 3) self.data_set_layout.addWidget(self.generate_data_set_button, 3, 1) self.data_set_layout.addWidget(self.show_data_button, 3, 2) self.data_set_layout.addWidget(self.print_gams_button, 3, 3) self.data_set_layout.addWidget(self.data_set_ready_button, 4, 1) self.data_set_layout.addWidget(self.data_set_number, 4, 2) self.solver_layout = QGridLayout() self.solver_layout.addWidget(self.solve_step_button, 1, 1) self.solver_layout.addWidget(self.solve_iteration_button, 1, 2) self.solver_layout.addWidget(self.solve_data_set_button, 1, 3) self.solver_layout.addWidget(self.solve_sequence_button, 1, 4) self.solver_layout.addWidget(self.show_solution_button, 2, 1) self.interaction_layout = QGridLayout() self.interaction_layout.addWidget(self.show_logger_button, 1, 1) self.interaction_layout.addWidget(self.show_simulation_button, 1, 3) self.interaction_layout.addWidget(self.show_data_table, 1, 4) self.button_layout = QVBoxLayout() self.button_layout.addLayout(self.data_set_layout) self.button_layout.addLayout(self.solver_layout) # self.button_layout.addLayout(self.interaction_layout) self.layout = QGridLayout() self.layout.addLayout(self.button_layout, 1, 1) self.layout.addWidget(self.logger, 1, 2) self.setLayout(self.layout) def set_logger_output(self, state): """ setup logger output between info and debug depending on the check box on main screen :param state: :return: """ if state == Qt.Checked: self.logger_root.setLevel(logging.DEBUG) self.logger_ch.setLevel(logging.DEBUG) logging.info("Debug Mode") else: self.logger_root.setLevel(logging.INFO) self.logger_ch.setLevel(logging.INFO) logging.info("Normal Mode") def new_data_set(self): """ new data set """ self.data = DataStore() logging.debug("New Data Set") def load_data(self): """ loads prev saved data :return: """ file_name, _ = QFileDialog.getOpenFileName(self, "Open file", "/home") try: self.data = pickle.load(open(file_name, "rb")) logging.info("Loaded file: {0}".format(file_name)) except Exception as e: logging.info(e) def save_data(self): """ saves current data :return: """ file_name, _ = QFileDialog.getSaveFileName(self, "Save file", "/home") try: pickle.dump(self.data, open(file_name, "wb")) logging.info("Saved to file: {0}".format(file_name)) except Exception as e: logging.info(e) def show_truck_data_window(self): self.truck_data_window = TruckDataWindow(self.data) self.truck_data_window.exec_() def show_data_set_window(self): self.data_set_window = DataSetWindow(self.data) self.data_set_window.exec_() def show_data_window(self): self.data_window = ShowData(self.data) self.data_window.exec_() def generate_data_set(self): # ask if sure self.data.arrival_times = [] self.data.boundaries = [] self.model = Solver(self.data) for i in range(len(self.data.data_set_list)): self.model.current_data_set = i self.model.set_data() def print_gams(self): file_name, _ = QFileDialog.getSaveFileName(self, "Open file", "/home") for i in range(len(self.data.data_set_list)): gams_writer(file_name + str(i), i, self.data) def set_data_set_number(self): self.current_data_set_number = self.data_set_number.value() - 1 def setup_data_set(self): # setup for one data set self.model = Solver(self.data) self.model.current_data_set = self.current_data_set_number self.model.load_data_set() self.algorithm = self.algorithm_list[self.algorithm_name]( self.number_of_iterations, self.current_data_set_number, self.model, self.data ) logging.info("Solving using {0} data set {1}".format(self.algorithm_name, self.current_data_set_number + 1)) logging.info("Nuber of iterations {0}".format(self.number_of_iterations)) self.solve_step_button.setEnabled(True) self.solve_iteration_button.setEnabled(True) self.solve_data_set_button.setEnabled(True) self.solve_sequence_button.setEnabled(True) self.show_solution_button.setEnabled(True) self.show_sequences_button.setEnabled(True) def solve_step(self): self.algorithm.step_mode = True self.algorithm.solve() def solve_iteration(self): self.algorithm.step_mode = False self.algorithm.solve() def solve_data_set(self): self.algorithm.solve_data_set() def solve_sequence(self): logging.info("--------------------Solving one sequence---------------------------------") self.set_sequence = SetSequence(self.data) self.set_sequence.exec_() sequence = self.set_sequence.set_sequence() sequence.print_sequence() self.one_time_model = Solver(self.data) self.one_time_model.current_data_set = self.current_data_set_number self.one_time_model.load_data_set() self.one_time_model.set_sequence(sequence) while not self.one_time_model.finish: self.one_time_model.next_step() total_error = 0 for truck in itertools.chain( self.one_time_model.outbound_trucks.values(), self.one_time_model.compound_trucks.values() ): truck.calculate_error() logging.info("Truck {0}, error {1}\n".format(truck.truck_name, truck.error)) total_error += abs(truck.error) logging.info("Error: {0}\n".format(total_error)) def show_solution(self): pass def show_sequences(self): pass