GLPK/Java
Java 是一種面向物件的應用程式程式語言。

GLPK for Java 使用 SWIG 為其 Java 語言繫結生成程式碼。此繫結在 GNU 通用公共許可證下發布。
GLPK for Java 可透過 Debian 包獲取libglpk-java, 也可用於 Ubuntu。Windows 二進位制檔案作為 GLPK for Windows 專案的一部分提供。
Windows 和符合 POSIX 標準的系統(包括所有 Linux 發行版)的 Makefile 可用於在其他系統上手動構建。如果您選擇此選項,則需要事先安裝 GLPK 和 SWIG。
GLPK for Java 檔案doc/glpk-java.pdf包含簡短描述。實際示例可以在以下位置找到:examples/java目錄。有關各個方法的使用,請參考doc/glpk.pdfGLPK 原始碼發行版。
以下是一個最小的 Java 類。將其儲存為檔案 Test.java。
import org.gnu.glpk.GLPK;
public class Test {
public static void main(String[] args) {
System.out.println( GLPK.glp_version());
}
}
然後在 64 位 Windows 下編譯此類
"%JAVA_HOME%\bin\javac" -classpath "C:\Program Files\GLPK\glpk-4.47\w64\glpk-java.jar" Test.java
或在 Linux 下編譯它
$JAVA_HOME/bin/javac -classpath /usr/local/share/java/glpk-java.jar Test.java
在 64 位 Windows 上執行結果檔案
java -Djava.library.path="C:\Program Files\GLPK\glpk-4.47\w64" -classpath "C:\Program Files\GLPK\glpk-4.47\w64\glpk-java.jar";. Test
或在 Linux 上執行該檔案(檔案路徑可能需要調整以匹配您的安裝)
java -Djava.library.path=/usr/local/lib/jni \ -classpath /usr/local/share/java/glpk-java.jar:. \ Test
輸出將是您的 GLPK 版本號,例如:4.47。

要將 GLPK for Java 與 Eclipse 結合使用,需要將 GLPK for Java jar 庫新增到專案屬性中。此外,還需要在此設定本機 DLL 庫的路徑。(見截圖)。
Java 線性最佳化包裝器 為 GLPK for Java API 提供了一個更直觀的介面。列和行可以透過名稱和索引直接訪問。
列的建立方法如下
Problem p = new Problem().
setName("Cutting Stock");
// x(i,j) : x pieces of product j are cut from stock i
for (int i = 0; i < stock.length; i++) {
for (int j = 0; j < product.length; j++) {
p.column("x", i, j).
type(Problem.ColumnType.INTEGER).
bounds(0.0, null);
}
}
行的建立和填充方法如下
// demand(j) = sum( x(i,j) )
for (int j = 0; j < product.length; j++) {
p.row("demand", j).bounds(demand[j], demand[j]);
for (int i = 0; i < stock.length; i++) {
p.row("demand", j).
add(1.0, "x", i, j);
}
}
您可以使用 Subversion 下載程式碼
svn checkout http://www.xypron.de/svn/linopt/ linopt
在您的 Maven 專案中使用此庫時,請在您的 pom.xml 中輸入以下儲存庫和依賴項(根據需要調整版本號)。
<repositories>
<repository>
<id>XypronRelease</id>
<name>Xypron Release</name>
<url>http://rsync.xypron.de/repository</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.xypron.linopt</groupId>
<artifactId>linopt</artifactId>
<version>1.10</version>
</dependency>
</dependencies>
使用 Maven 進行測試時,可能需要指示 GLPK for Java 共享庫(.so 或 .dll)的安裝路徑。
mvn clean install -DargLine='-Djava.library.path=/usr/local/lib/jni:/usr/lib/jni'
exec:java 目標可能需要在 MAVEN_OPTS 中指示 GLPK for Java 共享庫的安裝路徑,例如
export MAVEN_OPTS="-Djava.library.path=/usr/local/lib/jni:/usr/lib/jni"
mvn exec:java
Java ILP 為多個線性規劃求解器(包括 GLPK)提供 Java 介面。它是根據 GNU 寬通用公共許可證 (LGPL) 許可的。與 GLPK 的連結使用 GLPK for Java。
主頁 http://javailp.sourceforge.net/ 提供了示例程式碼。根據主頁,GLPK ≥ 4.43 受支援。
開發似乎已經停止。最後一次程式碼更新是在 2012-08-02。
OptimJ 是一種基於 Java 的建模語言和最佳化環境。OptimJ 可與多種商業和非商業求解器結合使用,包括 GLPK,並提供多種許可、免費下載和購買安排。OptimJ 來自法國巴黎的軟體公司 Ateji。
開發似乎已經停止。最新版本可追溯到 2011 年。
Java Native Access (JNA) 可用於從 Java 呼叫共享本機庫。專案主頁是 https://github.com/twall/jna。
使用 JNA 存在以下缺點
- GLPK 庫中發生的錯誤將終止主程序。
- 回撥無法使用。
以下示例使用 JNA 顯示 GLPK 庫版本號。
// file GlpkVersion.java
import com.sun.jna.Library;
import com.sun.jna.Native;
public class GlpkVersion {
/**
* Interface of the GLPK library.
*/
public interface Glpk extends Library {
Glpk INSTANCE = (Glpk) Native.loadLibrary("glpk", Glpk.class);
String glp_version();
}
public static void main(String[] args) {
System.out.println(Glpk.INSTANCE.glp_version());
}
}
使用以下命令編譯和執行
javac -classpath /usr/share/java/jna.jar GlpkVersion.java
java -classpath .:/usr/share/java/jna.jar GlpkVersion
根據您的 JNA 安裝路徑調整類路徑。
GLPK 3.3 提供了由 Yuri Victorovich 編寫的 Java 語言繫結。此繫結在版本 4.7 中從官方 GLPK 發行版中刪除,因為當時還沒有 GNU GPL 相容的 Java 實現。現在第三方專案為 GLPK 提供了 Java 繫結。
Björn Frank 釋出了 GLPK 4.8 Java 介面。它不再維護,也不能與當前版本的 GLPK 結合使用。特別是,使用者報告稱在 64 位 Linux 系統上部署時,浮點運算存在錯誤。