| from ortools.linear_solver import pywraplp |
| import re |
|
|
|
|
| def solve_linear_program(variables, constraints, objective, method): |
| decision_vars = [var.strip() for var in variables.split(",") if var.strip()] |
| constraints = [var.strip() for var in constraints.split(",") if var.strip()] |
|
|
| |
| objective = re.sub(r'(\d)([a-zA-Z])', r'\1*\2', objective) |
|
|
| solution_values = [] |
|
|
| solver = pywraplp.Solver.CreateSolver("GLOP") |
| if not solver: |
| return |
|
|
| for decision_variable in decision_vars: |
| globals()[decision_variable] = solver.NumVar(0, solver.infinity(), decision_variable) |
|
|
| for const in constraints: |
| |
| const = re.sub(r'(\d)([a-zA-Z])', r'\1*\2', const) |
| solver.Add(eval(const)) |
|
|
| if method == "max": |
| solver.Maximize(eval(objective)) |
| else: |
| solver.Minimize(eval(objective)) |
|
|
| status = solver.Solve() |
|
|
| if status == pywraplp.Solver.OPTIMAL: |
| for decision_variable in decision_vars: |
| solution_values.append(globals()[decision_variable].solution_value()) |
| result_data = {'objective': solver.Objective().Value(), |
| 'solution': solution_values, |
| 'variables': solver.NumVariables(), |
| 'constraints': solver.NumConstraints(), |
| 'type': method |
| } |
| result_string = f"Optimization Results:\n" |
| result_string += f"------------------------\n" |
| result_string += f"Optimization Type: {result_data['type']}\n" |
| result_string += f"Objective Value: {result_data['objective']}\n" |
| result_string += f"Solution:\n" |
| for i, var in enumerate(decision_vars): |
| result_string += f" {var}: {result_data['solution'][i]}\n" |
| result_string += f"------------------------\n" |
| result_string += f"Number of Variables: {result_data['variables']}\n" |
| result_string += f"Number of Constraints: {result_data['constraints']}\n" |
| return result_string |
|
|
| else: |
| return f"The problem does not have an optimal solution." |
|
|