diff --git a/src/pages/api/parseLP.ts b/src/pages/api/parseLP.ts new file mode 100644 index 0000000..604359f --- /dev/null +++ b/src/pages/api/parseLP.ts @@ -0,0 +1,36 @@ +type VariableLP = { name: string; coef: number }; +type ConstraintLP = { + name: string; + vars: VariableLP[]; + bnds: { ub: number; lb: number }; +}; + +interface ProblemLP { + objective: { + vars: VariableLP[]; + }; + constraints: ConstraintLP[]; +} + +function createProblemLP( + objectiveVars: VariableLP[], + constraints: { name: string; vars: VariableLP[]; ub: number; lb: number }[] +): ProblemLP { + const constraintsFormatted: ConstraintLP[] = constraints.map((constraint) => ({ + name: constraint.name, + vars: constraint.vars, + bnds: { + ub: constraint.ub, + lb: constraint.lb + } + })); + + const problem: ProblemLP = { + objective: { + vars: objectiveVars + }, + constraints: constraintsFormatted + }; + + return problem; +} \ No newline at end of file diff --git a/src/pages/api/parseMIP.ts b/src/pages/api/parseMIP.ts new file mode 100644 index 0000000..1fa534b --- /dev/null +++ b/src/pages/api/parseMIP.ts @@ -0,0 +1,77 @@ +interface VariableMIP { + name: string; + coef: number; +} + +interface Bounds { + type: number; + ub: number; + lb: number; +} + +interface ConstraintMIP { + name: string; + vars: VariableMIP[]; + bnds: Bounds; +} + +interface Options { + mipgap: number; + tmlim: number; + msglev: number; +} + +interface Problem { + name: string; + objective: { + direction: "min" | "max"; + name: string; + vars: VariableMIP[]; + }; + constraints: ConstraintMIP[]; + binaries?: string[]; + generals?: string[]; + options: Options; +} + +function createProblemMIP( + name: string, + direction: "min" | "max", + objectiveName: string, + objectiveVars: VariableMIP[], + constraints: { name: string; vars: VariableMIP[]; bnds_type: number; ub: number; lb: number }[], + binaries: string[], + generals: string[] = [], + mipgap: number, + tmlim: number, + msglev: number +): Problem { + const constraintsFormatted: ConstraintMIP[] = constraints.map((constraint) => ({ + name: constraint.name, + vars: constraint.vars, + bnds: { + type: constraint.bnds_type, + ub: constraint.ub, + lb: constraint.lb + } + })); + + const problem: Problem = { + name: name, + objective: { + direction: direction, + name: objectiveName, + vars: objectiveVars + }, + constraints: constraintsFormatted, + binaries: binaries.length > 0 ? binaries : undefined, + generals: generals.length > 0 ? generals : undefined, + options: { + mipgap: mipgap, + tmlim: tmlim, + msglev: msglev + } + }; + + return problem; +} \ No newline at end of file