def show_party_form(self): party_form = QMessageBox() party_form.setWindowTitle('Create a network party') _label_name = QLabel('Name:') _label_limit = QLabel('Limit of players:') _edit_name = QLineEdit() _edit_name.setText(Miscellaneous.get_random_word()) _spinbox_limit = QSpinBox() _spinbox_limit.setMaximum(10) _spinbox_limit.setMinimum(1) _spinbox_limit.setValue(2) create_party_widgets = [_label_name, _edit_name, _label_limit, _spinbox_limit] for widget in create_party_widgets: party_form.layout().addWidget(widget) party_form.setStandardButtons(QMessageBox.Save | QMessageBox.Cancel) ret = party_form.exec_() if ret == QMessageBox.Save: _party_model = _edit_name.text(), int(_spinbox_limit.text()), self.controller.get_name() self.controller.create_party(_party_model)
class Design(QDialog): def __init__(self): super(spur_design, self).__init__() self.createForm() self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.buttonBox.accepted.connect(self.submit) self.buttonBox.rejected.connect(self.reject) mainLayout = QVBoxLayout() mainLayout.addWidget(self.formGroupBox) mainLayout.addWidget(self.buttonBox) self.setLayout(mainLayout) self.setWindowTitle("OctoCAD\N{COPYRIGHT SIGN}") self.setGeometry(0, 0, 600, 400) self.setIcon() self.centering() self.show() def setIcon(self): icon = QIcon( "/home/ubuntu/OctoCAD/icons/logo_transparent_enlarged.png") self.setWindowIcon(icon) def centering(self): window = self.frameGeometry() center = QDesktopWidget().availableGeometry().center() window.moveCenter(center) self.move(window.topLeft()) def createForm(self): self.formGroupBox = QGroupBox("Design Configuration") self.layout = QFormLayout() self.Sutp = QDoubleSpinBox() self.Sutp.setRange(1, 10000) self.layout.addRow( QLabel("Enter ultimate tensile strength of pinion N.mm^-2"), self.Sutp) self.Sutg = QDoubleSpinBox() self.Sutg.setRange(1, 10000) self.layout.addRow( QLabel("Enter ultimate tensile strength of gear N.mm^-2"), self.Sutg) self.Ep = QDoubleSpinBox() self.Ep.setRange(1, 10000000) self.layout.addRow( QLabel("Enter modulus of elasticity of pinion N.mm^-2"), self.Ep) self.Eg = QDoubleSpinBox() self.Eg.setRange(1, 10000000) self.layout.addRow( QLabel("Enter modulus of elasticity of gear N.mm^-2"), self.Eg) self.grade = QComboBox() self.grade.addItem("1") self.grade.addItem("2") self.grade.addItem("3") self.grade.addItem("4") self.grade.addItem("5") self.grade.addItem("6") self.grade.addItem("7") self.grade.addItem("8") self.grade.addItem("9") self.grade.addItem("10") self.grade.addItem("11") self.grade.addItem("12") self.layout.addRow(QLabel("Select grade of gear pair"), self.grade) self.y = QComboBox() self.y.addItem("14.5 degree full depth involute tooth") self.y.addItem("20 degree full depth involute tooth") self.y.addItem("20 degree stub involute tooth") self.layout.addRow(QLabel("Select type of gear pair"), self.y) self.zp = QSpinBox() self.zp.setRange(14, 300) self.layout.addRow(QLabel("Enter number of pinion teeth"), self.zp) self.zg = QSpinBox() self.zg.setRange(14, 300) self.layout.addRow(QLabel("Enter number of gear teeth"), self.zg) self.P = QDoubleSpinBox() self.P.setRange(1, 1000000) self.layout.addRow(QLabel("Enter power transmitted by gear pair W"), self.P) self.Np = QDoubleSpinBox() self.Np.setRange(1, 10000) self.layout.addRow(QLabel("Enter speed of pinion rpm"), self.Np) self.Q = QComboBox() self.Q.addItem("Internal gearing") self.Q.addItem("External gearing") self.layout.addRow(QLabel("Enter type of gearing"), self.Q) self.FOSr = QDoubleSpinBox() self.FOSr.setRange(1, 10) self.layout.addRow(QLabel("Enter factor of safety"), self.FOSr) self.cs = QDoubleSpinBox() self.layout.addRow(QLabel("Enter service factor"), self.cs) self.cs.setRange(1, 10) self.formGroupBox.setLayout(self.layout) def submit(self): os.makedirs("/home/ubuntu/.OctoCAD/spur-gear", exist_ok=True) with open("/home/ubuntu/.OctoCAD/spur-gear/user_input_design.txt", "w") as user_input_design_f: user_input_design_f.write("# name: Eg\n# type: scalar\n") user_input_design_f.write(self.Eg.text() + "\n\n\n") user_input_design_f.write("# name: Ep\n# type: scalar\n") user_input_design_f.write(self.Ep.text() + "\n\n\n") user_input_design_f.write("# name: FOSr\n# type: scalar\n") user_input_design_f.write(self.FOSr.text() + "\n\n\n") user_input_design_f.write("# name: Np\n# type: scalar\n") user_input_design_f.write(self.Np.text() + "\n\n\n") user_input_design_f.write("# name: P\n# type: scalar\n") user_input_design_f.write(self.P.text() + "\n\n\n") user_input_design_f.write("# name: Q\n# type: scalar\n") if self.Q.currentText() == "Internal gearing": user_input_design_f.write("1" + "\n\n\n") if self.Q.currentText() == "External gearing": user_input_design_f.write("2" + "\n\n\n") user_input_design_f.write("# name: Sutg\n# type: scalar\n") user_input_design_f.write(self.Sutg.text() + "\n\n\n") user_input_design_f.write("# name: Sutp\n# type: scalar\n") user_input_design_f.write(self.Sutp.text() + "\n\n\n") user_input_design_f.write("# name: cs\n# type: scalar\n") user_input_design_f.write(self.cs.text() + "\n\n\n") user_input_design_f.write("# name: grade\n# type: scalar\n") user_input_design_f.write(self.grade.currentText() + "\n\n\n") user_input_design_f.write("# name: y\n# type: scalar\n") if self.y.currentText() == "14.5 degree full depth involute tooth": user_input_design_f.write("1" + "\n\n\n") if self.y.currentText() == "20 degree full depth involute tooth": user_input_design_f.write("2" + "\n\n\n") if self.y.currentText() == "20 degree stub involute tooth": user_input_design_f.write("3" + "\n\n\n") user_input_design_f.write("# name: zg\n# type: scalar\n") user_input_design_f.write(self.zg.text() + "\n\n\n") user_input_design_f.write("# name: zp\n# type: scalar\n") user_input_design_f.write(self.zp.text() + "\n\n\n") os.system("octave /home/ubuntu/OctoCAD/bis/gear/spur-gear/io.m") self.createResult() def createResult(self): with open("/home/ubuntu/.OctoCAD/spur-gear/result.txt", "r") as result_f: str_Fd = result_f.readline().split("=")[1].rstrip("\n") str_Fap = result_f.readline().split("=")[1].rstrip("\n") str_Fag = result_f.readline().split("=")[1].rstrip("\n") str_Fw = result_f.readline().split("=")[1].rstrip("\n") str_BHN = result_f.readline().split("=")[1].rstrip("\n") str_m = result_f.readline().split("=")[1].rstrip("\n") str_FOS = result_f.readline().split("=")[1].rstrip("\n") str_zp = result_f.readline().split("=")[1].rstrip("\n") str_zg = result_f.readline().split("=")[1].rstrip("\n") str_result = "Module of gear pair is " + str_m + " mm\n\nEffective load on the gear pair is " + str_Fd + " N\n\nBending load capacity of pinion is " + str_Fap + " N\n\nBending load capacity of gear " + str_Fag + " N\n\nWear load capacity of gear pair is " + str_Fw + " N\n\nSurface hardness of the gear pair is " + str_BHN + " BHN\n\nAvailabe factor of safety is " + str_FOS + "\n\n" result_box = QMessageBox() result_box.setWindowTitle("Design of gear pair") result_box.setText(str_result) result_box.exec_() obj_QApplication.exit()
class InputsLayout(QFormLayout): # this signal is connected to print_output from output_layout class. Connection is done in center_layout ga_result = Signal( str ) # a signal that is emitted so it can transfer resulting string to the output_layout class def __init__(self): super(InputsLayout, self).__init__() self.big_font = QFont() self.medium_font = QFont() self.header = QLabel() self.header_general = QLabel() self.header_fitness_remapping = QLabel() self.header_stop = QLabel() self.header_selection = QLabel() self.header_pairing = QLabel() self.header_crossover = QLabel() self.header_mutation = QLabel() self.inp_functions_combo = QComboBox() self.inp_num_variables = QSpinBox() self.inp_extrema_min = QRadioButton("Minimum") self.inp_extrema_max = QRadioButton("Maximum") self.inp_pop_size = QSpinBox() self.inp_lower_bound = QDoubleSpinBox() self.inp_upper_bound = QDoubleSpinBox() # Stopping self.inp_max_iter = QSpinBox() self.inp_similarity_cb = QCheckBox() self.inp_similarity = QSpinBox() self.inp_best_result_cb = QCheckBox() self.inp_best_result = QDoubleSpinBox() self.inp_average_result_cb = QCheckBox() self.inp_average_result = QDoubleSpinBox() # Fitness remapping self.inp_fitness_remapping = QComboBox() # Selection self.inp_selection_method = QComboBox() self.inp_elitism = QDoubleSpinBox() # Pairing self.inp_pairing_method = QComboBox() # Crossover self.inp_crossover_method = QComboBox() self.inp_crossover_fraction = QDoubleSpinBox() self.intermediate_offset = QDoubleSpinBox() # Mutation self.inp_mutation_method = QComboBox() self.inp_mutation_intensity = QDoubleSpinBox() self.inp_mutation_intensity_final = QDoubleSpinBox() self.init_fonts() self.init_header() self.init_row_functions() self.init_row_general() self.init_row_fitness_remapping() self.init_row_stop() self.init_row_selection() self.init_row_pairing() self.init_row_crossover() self.init_row_mutation() def init_fonts(self): self.big_font.setPointSizeF(14) self.medium_font.setPointSizeF(12) def init_header(self): self.header.setFont(self.big_font) self.header.setAlignment(Qt.AlignCenter) self.header.setText("Genetic Algorithm Continuous Optimization") self.addRow(self.header) self.addRow(QHLine()) def init_row_functions(self): self.inp_functions_combo.addItem("Ackley", ackley) self.inp_functions_combo.addItem("Griewank", griewank) self.inp_functions_combo.addItem("Michalewicz", michalewicz) self.inp_extrema_min.setChecked(True) radio_box = QHBoxLayout() radio_box.addWidget(self.inp_extrema_min) radio_box.addWidget(self.inp_extrema_max) self.addRow("Function:", self.inp_functions_combo) self.inp_num_variables.setMaximum(10000) self.inp_num_variables.setValue(10) self.addRow("Number of variables:", self.inp_num_variables) self.addRow("Find:", radio_box) self.addRow(QHLine()) def init_row_general(self): self.header_general.setFont(self.medium_font) self.header_general.setText("General") self.inp_pop_size.setMaximum(10000) self.inp_pop_size.setValue(300) self.inp_lower_bound.setMaximum(1000000) self.inp_lower_bound.setMinimum(-1000000.0) self.inp_lower_bound.setValue(-10) self.inp_upper_bound.setMaximum(1000000) self.inp_upper_bound.setMinimum(-1000000.0) self.inp_upper_bound.setValue(10) self.addRow(self.header_general) self.addRow("Population size", self.inp_pop_size) self.addRow("Lower Bound", self.inp_lower_bound) self.addRow("Upper Bound", self.inp_upper_bound) self.addRow(QHLine()) def init_row_fitness_remapping(self): self.header_fitness_remapping.setFont(self.medium_font) self.header_fitness_remapping.setText("Fitness Remapping") self.inp_fitness_remapping.addItem("Rank Scaling", "Rank Scaling") self.inp_fitness_remapping.addItem("Fitness Scaling", "Fitness Scaling") self.addRow(self.header_fitness_remapping) self.addRow("Fitness remapping", self.inp_fitness_remapping) self.addRow(QHLine()) def init_row_stop(self): self.header_stop.setFont(self.medium_font) self.header_stop.setText("Stopping Criteria") self.inp_max_iter.setMaximum(100000) self.inp_similarity.setMaximum(100000) self.inp_best_result.setMinimum(-100000) self.inp_best_result.setMaximum(100000) self.inp_average_result.setMinimum(-100000) self.inp_average_result.setMaximum(100000) self.inp_max_iter.setValue(500) self.inp_similarity.setValue(80) self.inp_best_result.setValue(-10) self.inp_average_result.setValue(-10000) self.inp_similarity_cb.setText("Similar Results") self.inp_best_result_cb.setText("Best Result") self.inp_average_result_cb.setText("Average Result") self.inp_similarity_cb.stateChanged.connect(self.cb_similarity_signal) self.inp_best_result_cb.stateChanged.connect( self.cb_best_result_signal) self.inp_average_result_cb.stateChanged.connect( self.cb_average_result_signal) self.inp_similarity_cb.setChecked(False) self.inp_best_result_cb.setChecked(False) self.inp_average_result_cb.setChecked(False) self.inp_similarity.setEnabled(True) self.inp_best_result.setEnabled(False) self.inp_best_result.setStyleSheet("background:#555") self.inp_average_result.setEnabled(False) self.inp_average_result.setStyleSheet("background:#555") self.addRow(self.header_stop) self.addRow("Max iter", self.inp_max_iter) self.addRow(self.inp_similarity_cb, self.inp_similarity) self.addRow(self.inp_best_result_cb, self.inp_best_result) self.addRow(self.inp_average_result_cb, self.inp_average_result) self.addRow(QHLine()) def init_row_selection(self): self.header_selection.setFont(self.medium_font) self.header_selection.setText("Selection") self.inp_selection_method.addItem("Fittest Half", "Fittest Half") self.inp_selection_method.addItem("Roulette Wheel", "Roulette Wheel") self.inp_selection_method.addItem("Random", "Random") self.inp_selection_method.addItem("Whole Population", "Whole Population") self.inp_elitism.setMaximum(1) self.inp_elitism.setValue(0.01) self.inp_elitism.setSingleStep(0.01) self.addRow(self.header_selection) self.addRow("Selection Method", self.inp_selection_method) self.addRow("Elitism Percentage", self.inp_elitism) self.addRow(QHLine()) def init_row_pairing(self): self.header_pairing.setFont(self.medium_font) self.header_pairing.setText("Pairing") self.inp_pairing_method.addItem("Random", "Random") self.inp_pairing_method.addItem("Roulette Wheel", "Roulette Wheel") self.inp_pairing_method.addItem("Fittest", "Fittest") self.addRow(self.header_pairing) self.addRow("Pairing Method", self.inp_pairing_method) self.addRow(QHLine()) def init_row_crossover(self): self.header_crossover.setFont(self.medium_font) self.header_crossover.setText("Crossover") self.inp_crossover_method.addItem("Intermediate", "Intermediate") self.inp_crossover_method.addItem("Line Intermediate", "Line Intermediate") self.inp_crossover_method.addItem("Heuristic", "Heuristic") self.inp_crossover_method.addItem("One point", "One point") self.inp_crossover_method.addItem("Two point", "Two point") self.inp_crossover_method.addItem("Random", "Random") self.inp_mutation_method.setCurrentIndex(2) self.inp_crossover_fraction.setMaximum(1) self.inp_crossover_fraction.setValue(0.7) self.inp_crossover_fraction.setSingleStep(0.05) self.intermediate_offset.setMaximum(20) self.intermediate_offset.setValue(1.55) self.intermediate_offset.setSingleStep(0.05) self.addRow(self.header_crossover) self.addRow("Crossover Method", self.inp_crossover_method) self.addRow("Crossover Fraction", self.inp_crossover_fraction) self.addRow("Intermediate Offset", self.intermediate_offset) self.addRow(QHLine()) def init_row_mutation(self): self.header_mutation.setFont(self.medium_font) self.header_mutation.setText("Mutation") self.inp_mutation_method.addItem("Gauss", "Gauss") self.inp_mutation_method.addItem("Random", "Random") self.inp_mutation_intensity.setMaximum(200) self.inp_mutation_intensity.setValue(2) self.inp_mutation_intensity.setDecimals(4) self.inp_mutation_intensity.setSingleStep(0.01) self.inp_mutation_intensity_final.setMaximum(200) self.inp_mutation_intensity_final.setDecimals(4) self.inp_mutation_intensity_final.setValue(0.001) self.inp_mutation_intensity_final.setSingleStep(0.5) self.addRow(self.header_mutation) self.addRow("Mutation Method", self.inp_mutation_method) self.addRow("Mutation Intensity", self.inp_mutation_intensity) self.addRow("Final Mutation Intensity", self.inp_mutation_intensity_final) self.addRow(QHLine()) def get_options(self): function = self.inp_functions_combo.currentData() num_var = self.inp_num_variables.text() if self.inp_extrema_min.isChecked(): extrem = 0 else: extrem = 1 pop_size = self.inp_pop_size.text() low_bound = self.inp_lower_bound.text() upp_bound = self.inp_upper_bound.text() max_iter = self.inp_max_iter.text() sim_results = self.inp_similarity.text() best_res = self.inp_best_result.text() average_res = self.inp_average_result.text() select_method = self.inp_selection_method.currentText() elite_percent = self.inp_elitism.text() pairing = self.inp_pairing_method.currentText() crossover_method = self.inp_crossover_method.currentText() crossover_fraction = self.inp_crossover_fraction.text() intermediate_offset = self.intermediate_offset.text() mutation_method = self.inp_mutation_method.currentText() mutation_intensity = self.inp_mutation_intensity.text() mutation_intensity_final = self.inp_mutation_intensity_final.text() fitness_remapping = self.inp_fitness_remapping.currentText() options = { "function": function, "num_var": num_var, "pop_size": int(pop_size), "max_iter": int(max_iter), "lower_bound": float(low_bound.replace(",", ".")), "upper_bound": float(upp_bound.replace(",", ".")), "find_max": extrem, "prints": 0, "average_result": float(average_res.replace(",", ".")), "best_result": float(best_res.replace(",", ".")), "similarity": float(sim_results.replace(",", ".")), "selection": select_method, "pairing": pairing, "crossover": crossover_method, "crossover_fraction": float(crossover_fraction.replace(",", ".")), "intermediate_offset": float(intermediate_offset.replace(",", ".")), # 0 mean child will be between parents, 1 mean offset is same as two parent distance "mutation": mutation_method, "mutation_intensity": float(mutation_intensity.replace(",", ".")), "mutation_intensity_final": float(mutation_intensity_final.replace(",", ".")), "elitism": float(elite_percent.replace(",", ".")), "fitness_remapping": fitness_remapping } if not self.inp_similarity_cb.isChecked(): options["similarity"] = None if not self.inp_best_result_cb.isChecked(): options["best_result"] = None if not self.inp_average_result_cb.isChecked(): options["average_result"] = None return options def cb_similarity_signal(self): if self.inp_similarity_cb.isChecked(): self.inp_similarity.setEnabled(True) self.inp_similarity.setStyleSheet("") else: self.inp_similarity.setEnabled(False) self.inp_similarity.setStyleSheet("background:#555") def cb_best_result_signal(self): if self.inp_best_result_cb.isChecked(): self.inp_best_result.setEnabled(True) self.inp_best_result.setStyleSheet("") else: self.inp_best_result.setEnabled(False) self.inp_best_result.setStyleSheet("background:#555") def cb_average_result_signal(self): if self.inp_average_result_cb.isChecked(): self.inp_average_result.setEnabled(True) self.inp_average_result.setStyleSheet("") else: self.inp_average_result.setEnabled(False) self.inp_average_result.setStyleSheet("background:#555")