BridJ: ошибка LoadLibrary при загрузке Clp.dll: сбой процедуры инициализации библиотеки динамических ссылок (DLL) - PullRequest
0 голосов
/ 03 декабря 2018

Я использую `clp-java для линейной оптимизации, но когда я пытаюсь запустить код, я получаю следующую ошибку: Процесс продолжает работать, а следующее несколько раз печатается.

BridJ: ошибка LoadLibrary при загрузке C: \ Users \ Abhijay \ AppData \ Local \ Temp \ CLPExtractedLib1623275631902676 \ Clp.dll: сбой процедуры инициализации библиотеки динамических ссылок (DLL).

Я добавил следующеезависимости в pom.xml.

<dependency>
    <groupId>com.quantego</groupId>
    <artifactId>clp-java</artifactId>
    <version>1.16.10</version>
</dependency>

<dependency>
    <groupId>com.nativelibs4java</groupId>
    <artifactId>bridj</artifactId>
    <version>0.7.0</version>
</dependency>

Вот мой код:

import com.quantego.clp.CLP;
import com.quantego.clp.CLP.ALGORITHM;
import com.quantego.clp.CLPVariable;

public class ClpDemo {

    public static void main(String[] args) {
        CLP model = new CLP().algorithm(ALGORITHM.AUTO).maximization().presolve(false);
        CLPVariable x1 = model.addVariable().lb(0);
        CLPVariable x2 = model.addVariable().lb(0);
        model.createExpression().add(10, x1).add(20, x2).leq(120);
        model.createExpression().add(8, x1).add(8, x2).leq(80);
        model.createExpression().add(12, x1).add(16, x2).asObjective();
        model.solve();
        double x1Value = model.getSolution(x1);
        double x2Value = model.getSolution(x2);
        System.out.println("x1 :" + x1Value + " x2 :" + x2Value);
      }
} 

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я реализовал собственную версию линейного программирования, также поддерживает смешанное целочисленное линейное программирование.Если вы заинтересованы в использовании инструмента, вот ссылка .

Проблема:

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();
0 голосов
/ 04 декабря 2018

Последняя сборка из ветки dev решает проблему.Скоро его отправят в мавен.

...