Spaces:
Runtime error
Runtime error
import gradio as gr | |
from ast_parser import Parser, EquationKind | |
from algorithm import solver | |
def process(input_equation): | |
parser = Parser(input_equation) | |
equations = tuple(parser) | |
for equation in equations: | |
if equation.kind == EquationKind.GEQ and equation.bound < 0.0: | |
for variable, coefficient in equation.variables.items(): | |
equation.variables[variable] *= -1.0 | |
equation.bound *= -1.0 | |
equation.kind = EquationKind.LEQ | |
continue | |
if equation.kind == EquationKind.GEQ: | |
raise ValueError("Equation kind must be either EQ or LEQ") | |
if equation.bound < 0.0: | |
raise ValueError("Equation bound must be non-negative") | |
demand: dict[str, list[int]] = {} | |
for i, equation in enumerate(equations): | |
for variable, coefficient in equation.variables.items(): | |
if coefficient == 0.0: | |
continue | |
if variable not in demand: | |
demand[variable] = [] | |
demand[variable].append(i) | |
objective_variables = tuple( | |
filter(lambda variable: len(demand[variable]) == 1, demand.keys()) | |
) | |
objective_functions = tuple( | |
filter( | |
lambda function: function.kind == EquationKind.EQ, | |
map(lambda variable: equations[demand[variable][0]], objective_variables), | |
) | |
) | |
if len(objective_variables) != len(objective_functions): | |
raise ValueError("Objective functions must be equalities") | |
constraints = tuple( | |
filter( | |
lambda function: function not in objective_functions, | |
equations, | |
) | |
) | |
solver_instance = solver.Solver(objective_functions, constraints) | |
results = solver_instance.get_results() | |
return results | |
description = "This app calculates optimum value using Simplex Method. Enter all equations, following each with a comma. The last equation should be without a comma. As an example 'Z = 5x_1 + 4x_2', '6x_1 + 4x_2 <= 24'" | |
examples = [["Z = 5x_1 + 4x_2,6x_1 + 4x_2 <= 24"]] | |
demo = gr.Interface(fn=process, inputs="text", outputs="text", title="Optimization Assignment",examples=examples,description=description) | |
demo.launch() |