【问题标题】:android linear programming lp_solve libraryandroid 线性规划 lp_solve 库
【发布时间】:2013-03-07 14:34:52
【问题描述】:

谁能帮助我如何在 Android 设备上使用 lpsolve55j.jar。我尝试像其他所有库一样导入它(将其放在 libs 文件夹中并将其添加到 JavaBuildPath -> 库中),但出现此错误:

03-07 15:28:52.910: W/dalvikvm(3421): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Llpsolve/LpSolve;
03-07 15:28:52.910: D/AndroidRuntime(3421): Shutting down VM
03-07 15:28:52.910: W/dalvikvm(3421): threadid=1: thread exiting with uncaught exception (group=0x9e495930)
03-07 15:28:52.910: E/AndroidRuntime(3421): FATAL EXCEPTION: main
03-07 15:28:52.910: E/AndroidRuntime(3421): java.lang.UnsatisfiedLinkError: Couldn't load lpsolve55j from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.app.cutstockan-2.apk,libraryPath=/data/app-lib/com.app.cutstockan-2]: findLibrary returned null
03-07 15:28:52.910: E/AndroidRuntime(3421):     at java.lang.Runtime.loadLibrary(Runtime.java:365)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at java.lang.System.loadLibrary(System.java:535)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at lpsolve.LpSolve.<clinit>(LpSolve.java:275)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at com.app.cutstockan.Calculate.generateEquations(Calculate.java:123)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at com.app.cutstockan.Calculate.<init>(Calculate.java:52)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at com.app.cutstockan.Main$1.onClick(Main.java:37)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at android.view.View.performClick(View.java:4204)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at android.view.View$PerformClick.run(View.java:17355)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at android.os.Handler.handleCallback(Handler.java:725)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at android.os.Looper.loop(Looper.java:137)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at android.app.ActivityThread.main(ActivityThread.java:5202)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at java.lang.reflect.Method.invoke(Method.java:511)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
03-07 15:28:52.910: E/AndroidRuntime(3421):     at dalvik.system.NativeStart.main(Native Method)
03-07 15:28:54.650: I/Process(3421): Sending signal. PID: 3421 SIG: 9

编辑

好的,所以我需要这个来解决不平等系统。有人可以帮我找到可以解决此问题的库的替代方案吗?

【问题讨论】:

  • 这个 jar 包含原生库......所以如果你不为 Android 编译原生库,它将无法在 Android 上运行......
  • @Selvin 我找到了库的源代码,有什么建议可以为 Android 编译库吗?
  • 可能有点离题,但您可能会重新考虑在 Android 设备上解决 LP(改用服务器?)。
  • 当然,我自己没有尝试过,但也许您应该能够在您的 Android 应用程序中构建和使用来自 Apache Commons Math 的 Simplex 求解器?
  • @nikmin 但是你一个目标函数吗?您可以通过指定 lhs-rhs Relationship 将 LP 问题的 LinearConstraints 表述为不等式。嗯,我现在注意到 SimplexSolver 在 Commons Math 3.1 中已被弃用,但我不知道原因是什么?

标签: android linear-programming lpsolve


【解决方案1】:

Apache Commons Math 是一个纯 Java 库,其中包含例如用于求解线性程序的 Simplex 算法。这个库的二进制文件应该可以在 Android 应用程序中按原样使用,或者应该直接为 Android 构建库。

相关的unit test cases 充分说明了 Apache Commons Math SimplexSolver 用于解决不同类型的较小 LP 问题的用法。

【讨论】:

  • 我解决了。但是有一个问题。有没有办法调用 solver.optimize 以返回整数而不是双精度数的结果?我想得到最好的整数结果
  • Apache Commons Math 中的 LP 优化器只能处理浮点变量,不支持整数变量(混合整数线性规划)。我环顾四周,不幸的是,开箱即用我找不到任何可用的纯 Java MILP 库。有一个雄心勃勃的项目将 GLPK(支持整数变量)移植到 Javascriptglpk.js,这可以用吗?
  • 我觉得这没什么用:(如果你找到别的东西我会非常感激。谢谢你的帮助
猜你喜欢
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多