Я реализовал собственную версию линейного программирования, также поддерживает смешанное целочисленное линейное программирование.Если вы заинтересованы в использовании инструмента, вот ссылка .
Проблема:
max: x+y
-2x + 2y >= 1
-8x + 10y <= 13
x,y : real
Пример линейного программирования.
//Function
double[] function = new double[] {1,1};
//Constraints
List<Constraint> constraints = new ArrayList<>();
constraints.add(new Constraint(new double[] {-2,2}, Constraint.Symbol.GREATER_THAN, 1));
constraints.add(new Constraint(new double[] {-8,10}, Constraint.Symbol.LESS_THAN, 13));
LinearProgramming lp = new LinearProgramming(LinearProgramming.Objective.Maximize);
int status = lp.Solve(function, constraints);
switch(status){
case LinearProgramming.INFEASIBLE:
System.out.println("Infeasible solution");
break;
case LinearProgramming.OPTIMAL:
System.out.println("Optimal solution found");
case LinearProgramming.UNBOUNDED:
System.out.println("Unbounded solution");
}
double[] coef = lp.getCoefficients();
double solution = lp.getSolution();
Проблема:
max: x+y
-2x + 2y >= 1
-8x + 10y <= 13
x: real
y: integer
Пример смешанного целочисленного линейного программирования.
//Function
double[] function = new double[] {1,1};
//Constraints
List<Constraint> constraints = new ArrayList<>();
constraints.add(new Constraint(new double[] {-2,2}, Constraint.Symbol.GREATER_THAN, 1));
constraints.add(new Constraint(new double[] {-8,10}, Constraint.Symbol.LESS_THAN, 13));
//Define integer variables
//1: integer
//0: double
int[] types = new int[] {0,1};
MixedIntegerLinearProgramming lp = new MixedIntegerLinearProgramming(MixedIntegerLinearProgramming.Objective.Maximize);
lp.setType(types);
int status = lp.Solve(function, constraints);
switch(status){
case LinearProgramming.INFEASIBLE:
System.out.println("Infeasible solution");
break;
case LinearProgramming.OPTIMAL:
System.out.println("Optimal solution found");
case LinearProgramming.UNBOUNDED:
System.out.println("Unbounded solution");
}
double[] coef = lp.getCoefficients();
double solution = lp.getSolution();