I write this code for solving GP programming but give error, I can’t solve that.
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QTextEdit, QComboBox
from pyomo.environ import *
from pyomo.opt import SolverFactory
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Goal Programming Solver")
self.setGeometry(100, 100, 800, 600)
# Create the central widget and layout
centralWidget = QWidget(self)
centralLayout = QVBoxLayout(centralWidget)
# Create the input widgets
inputWidget = QWidget()
inputLayout = QVBoxLayout(inputWidget)
# Function type (min or max)
self.functionLabel = QLabel("Function Type:")
self.functionComboBox = QComboBox()
self.functionComboBox.addItem("Minimize")
self.functionComboBox.addItem("Maximize")
inputLayout.addWidget(self.functionLabel)
inputLayout.addWidget(self.functionComboBox)
# Goal values
self.goalLabel = QLabel("Goal Values:")
self.goalLineEdit = QLineEdit()
inputLayout.addWidget(self.goalLabel)
inputLayout.addWidget(self.goalLineEdit)
# Decision variables
self.decisionLabel = QLabel("Decision Variables:")
self.decisionTextEdit = QTextEdit()
inputLayout.addWidget(self.decisionLabel)
inputLayout.addWidget(self.decisionTextEdit)
# Constraints
self.constraintLabel = QLabel("Constraints:")
self.constraintTextEdit = QTextEdit()
inputLayout.addWidget(self.constraintLabel)
inputLayout.addWidget(self.constraintTextEdit)
# Add the input widget to the central layout
centralLayout.addWidget(inputWidget)
# Create the solve button
self.solveButton = QPushButton("Solve")
self.solveButton.clicked.connect(self.solveProblem)
centralLayout.addWidget(self.solveButton)
# Create the output widget
outputWidget = QWidget()
outputLayout = QVBoxLayout(outputWidget)
# Objective value
self.objectiveLabel = QLabel("Objective Value:")
self.objectiveLineEdit = QLineEdit()
self.objectiveLineEdit.setReadOnly(True)
outputLayout.addWidget(self.objectiveLabel)
outputLayout.addWidget(self.objectiveLineEdit)
# Solution values
self.solutionLabel = QLabel("Solution Values:")
self.solutionTextEdit = QTextEdit()
self.solutionTextEdit.setReadOnly(True)
outputLayout.addWidget(self.solutionLabel)
outputLayout.addWidget(self.solutionTextEdit)
# Add the output widget to the central layout
centralLayout.addWidget(outputWidget)
# Set the central widget
self.setCentralWidget(centralWidget)
def solveProblem(self):
# Create the Pyomo model
model = ConcreteModel()
# Define the decision variables
decisions = self.decisionTextEdit.toPlainText().split('\n')
model.decisionVars = Var(decisions, domain=NonNegativeReals)
# Define the constraints
constraints = self.constraintTextEdit.toPlainText().split('\n')
for constraint in constraints:
if constraint != '':
parts = constraint.split()
if len(parts) != 3:
self.solutionTextEdit.setText("Error: Invalid constraint format")
return
lhs, op, rhs = parts
if op == '<=':
model.add_constraint(sum(model.decisionVars[lhs] for lhs in lhs.split('+')) <= float(rhs))
elif op == '>=':
model.add_constraint(sum(model.decisionVars[lhs] for lhs in lhs.split('+')) >= float(rhs))
elif op == '==':
model.add_constraint(sum(model.decisionVars[lhs] for lhs in lhs.split('+')) == float(rhs))
# Define the objective function
goalValues = self.goalLineEdit.text().split(',')
if len(goalValues) == 1:
model.objective = Objective(expr=sum((model.decisionVars[d] - float(goalValues[0]))**2 for d in decisions))
else:
goalValues = [float(g) for g in goalValues]
if self.functionComboBox.currentIndex() == 0:
model.objective = Objective(expr=sum((model.decisionVars[d] - goalValues[i])**2 for i, d in enumerate(decisions)))
else:
model.objective = Objective(expr=-sum((model.decisionVars[d] - goalValues[i])**2 for i, d in enumerate(decisions)))
# Solve the model using CPLEX solver
solver = SolverFactory('cplex', executable="C:/Program Files/IBM/ILOG/CPLEX_Studio221/cplex/bin/x64_win64")
results = solver.solve(model)
# Display the results
self.objectiveLineEdit.setText(str(model.objective()))
solutionText = ''
for d in decisions:
solutionText += d + ' = ' + str(model.decisionVars[d]()) + '\n'
self.solutionTextEdit.setText(solutionText)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec())