我正在寻找一个很好的R包来解决线性编程模型.我对默认情况非常满意lpSolve::lp,但没有办法获得影子并降低价格.我需要这些以及完整性约束.
样品型号:
A = rbind(
c(0.5, 0.2, 0.2),
c( -1, 1, 0),
c( 0, 1, -1),
c( -1, -1, -1),
c( -1, 0, 0),
c( 0, -1, 0),
c( 0, 0, -1)
)
b = c(5, 0, 0, -13, 0, 0, 0)
c_ = c(8.4, 6, 9.2)
(signs = c('=', rep('<=', 6)))
res = lpSolve::lp('min', c_, A, signs, b, all.int = TRUE)
# Objective function
res
# Variables
res$solution
# Shadow prices???
# Reduced prices???
Run Code Online (Sandbox Code Playgroud) 我是lp解决的新手.我试图运行以下代码并收到以下错误:
package package1;
/**
* Created by ANJANEY on 6/13/2014.
*/
import lpsolve.*;
public class Demo {
public static void main(String[] args) {
try {
// Create a problem with 4 variables and 0 constraints
LpSolve solver = LpSolve.makeLp(0, 4);
// add constraints
solver.strAddConstraint("3 2 2 1", LpSolve.LE, 4);
solver.strAddConstraint("0 4 3 1", LpSolve.GE, 3);
// set objective function
solver.strSetObjFn("2 3 -2 3");
// solve the problem
solver.solve();
// print solution
System.out.println("Value of objective function: " + solver.getObjective());
double[] var …Run Code Online (Sandbox Code Playgroud) 当我尝试使用LPSolve for Java(简化版本,http://code.google.com/p/lpsolve-java/source/checkout)时,出现以下错误:
java.lang.UnsatisfiedLinkError: C:\Windows\System32\lpsolve55j.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at lpsolve.LpSolve.<clinit>(LpSolve.java:274)
Run Code Online (Sandbox Code Playgroud)
一世
在Eclipse(测试用例)以及执行“ MVN测试”期间均会发生错误。
这些都没有帮助。
如何解决此错误?
我正在使用R lpsolve包来优化我的运输模型.我的代码运行正常,但由于我有大量的节点和路径,因此需要花费大量时间.我计划在hadoop集群上运行我的代码.
请引导我关于我需要对代码进行的更改.我认为在hadoop集群上运行优化可能是不可能的,因为我们可能最终得到局部最小值而不是全局最小值.
我在互联网上搜索"lpsolve hadoop"之类的术语,但没有得到任何有用的信息.
请指导我看一下我应该看的材料或例子.=====================================更新1 =========== ===========================我遇到的原始问题就在这里.
我进一步简化了问题,我正在解决的当前问题如下.
我附加了使用excel构建的R代码和输入数据文件.在实际场景中,输入数据文件将使用SQL生成,并且长度将超过30,000行.

我的输入excel文件:
startlink endlink link_dsc lnk_type cons_type cost equality_const fpc_const max_const
"source","-","-","0" "vmi1","MM1","VMI","1" source_to_VMI supply equality supply 0 100 null null
"vmi1","MM1","VMI","0" "cust1","MM1","SHIP_CUST_1d_AIR","1" vmi_to_shipcust flow null 5 null null null
"vmi1","MM1","VMI","1" "cust1","MM1","SHIP_CUST_1d_AIR","2" vmi_to_shipcust flow null 5 null null null
"vmi1","MM1","VMI","2" "cust1","MM1","SHIP_CUST_1d_AIR","3" vmi_to_shipcust flow null 5 null null null
"vmi1","MM1","VMI","3" "cust1","MM1","SHIP_CUST_1d_AIR","4" vmi_to_shipcust flow null 5 null null null
"vmi1","MM1","VMI","4" "cust1","MM1","SHIP_CUST_1d_AIR","5" vmi_to_shipcust flow null 5 null null null
"vmi1","MM1","VMI","5" "cust1","MM1","SHIP_CUST_1d_AIR","6" vmi_to_shipcust …Run Code Online (Sandbox Code Playgroud) 我一直在使用lpSolve和lpSolveAPI.我构建我的约束矩阵,目标函数等,并提供给lp函数,这很好用.我想使用write.lp将问题保存为lp文件,但我遇到了麻烦.我不断收到错误,告诉我该对象不是lp对象.有任何想法吗?
> x1 = lp(direction = "min", cost, A , ">=",r,,3:13, , , ,FALSE)
> class(x1)
[1] "lp"
>write.lp(x1, filename, type = "lp",use.names = c(TRUE, TRUE))
Error in write.lp(x1, filename, type = "lp", use.names = c(TRUE, TRUE)) :
the lp argument does not appear to be a valid linear program record
Run Code Online (Sandbox Code Playgroud) 我必须找到一些微小的线性编程问题的所有基本解决方案。
这是一个示例(采用lp_solve格式):
max: x1 + x2;
x1 + x2 <= 1;
x1 <= 0.8;
x2 <= 0.8;
Run Code Online (Sandbox Code Playgroud)
所有2种基本解决方案:
当然,有一种寻找替代解决方案的方法,但是我真的更喜欢使用现有的库,而不是精心设计自己的单纯形代码。
我使用Python作为编程语言,希望lp_solve或GLPK的C API中有某种方法可以做到这一点。
谢谢。
有没有办法让lpSolve返回多个解决方案?在下面的情况下,我想要(5,0)和(0,5)两者.
如果lpSolve无法做到这一点,那么是否有任何其他R包将返回整体线性优化程序的所有可能解决方案?
library("lpSolve")
A=matrix (c(1, 1), nrow=1, byrow=TRUE)
b=(5)
signs='=='
c_=c(1,1)
res = lpSolve::lp('max', c_, A, signs, b, all.int = TRUE)
res$solution
Run Code Online (Sandbox Code Playgroud)
================================================== =====================
我还想知道为什么lpSolve包提供了所有可能的解决方案,如果所有决策变量都是二进制的.当所有变量都是整数时,为什么不能重复相同的...
我有一个房间列表,房间的最大平方英尺,程序,程序的最大平方英尺,以及房间与预期程序使用的匹配程度(匹配#)的值.在帮助下,我已经能够最大化匹配#和平方英尺用于每个房间一个程序.但是,我想进一步采用这种分析,只要多次匹配仍然符合平方英尺要求,允许同一房间内的多个程序或同一程序的倍数(如果它具有最高匹配#).此外,我想告诉lpSolve整体而言,我只想在整个建筑物中使用"x"数量的办公室,"y"数量的工作室等.到目前为止,这是我的数据和代码:
program.size <- c(120,320,300,800,500,1000,500,1000,1500,400,1500,2000)
room.size <- c(1414,682,1484,2938,1985,1493,427,1958,708,581,1485,652,727,2556,1634,187,2174,205,1070,2165,1680,1449,1441,2289,986,298,590,2925)
(obj.vals <- matrix(c(3,4,2,8,3,7,4,8,6,4,7,7,
3,4,2,8,3,7,4,8,6,4,7,7,
4,5,3,7,4,6,5,7,5,3,6,6,
2,3,1,7,2,6,3,7,7,5,6,6,
4,5,3,7,4,6,5,7,5,3,6,6,
3,6,4,8,5,7,4,8,7,7,7,7,
3,4,2,8,3,7,4,8,6,4,7,7,
4,5,3,7,4,6,5,7,5,3,6,6,
6,7,5,7,6,6,7,7,5,3,6,6,
6,7,5,7,6,6,7,7,5,3,6,6,
5,6,6,6,5,7,8,6,4,2,5,5,
6,7,5,7,6,6,7,7,5,3,6,6,
6,7,5,7,6,6,7,7,5,3,6,6,
3,4,4,8,3,9,6,8,6,4,7,7,
3,4,2,6,3,5,4,6,6,4,5,5,
4,5,3,5,4,4,5,5,5,3,4,4,
5,6,4,8,5,7,6,8,6,4,7,7,
5,6,4,8,5,7,6,8,6,4,7,7,
4,5,5,7,4,8,7,7,5,3,6,6,
5,6,4,8,5,7,6,8,6,4,7,7,
3,4,2,6,3,5,4,6,6,4,5,5,
5,6,4,8,5,7,6,8,6,4,7,7,
5,6,4,8,5,7,6,8,6,4,7,7,
5,4,4,6,5,5,6,6,6,6,7,5,
6,5,5,5,6,4,5,5,5,7,6,4,
4,5,3,7,4,6,5,7,7,5,6,6,
6,5,5,5,6,4,5,5,5,7,6,4,
3,4,4,6,3,7,6,6,6,4,5,5), nrow=12))
rownames(obj.vals) <- c("Enclosed Offices", "Open Office", "Reception / Greeter", "Studio / Classroom",
"Conference / Meeting Room", "Gallery", "Public / Lobby / Waiting",
"Collaborative Space", "Mechanical / Support", "Storage / Archives",
"Fabrication", "Performance")
(obj.adj <- obj.vals * outer(program.size, room.size, "<="))
nr <- nrow(obj.adj) …Run Code Online (Sandbox Code Playgroud) 例如,我有这个示例数据:
d=data.frame(x=c(1,1,1,2,2,3,4,4),y=c(5,6,7,8,7,5,6,5),w=c(1,2,3,4,5,6,7,8))
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
x y w
1 1 5 1
2 1 6 2
3 1 7 3
4 2 8 4
5 2 7 5
6 3 5 6
7 4 6 7
8 4 5 8
Run Code Online (Sandbox Code Playgroud)
x并y从代表指数datax和datay.w代表datax[x]与之比较的分数datay[y].我想最大化总得分(或w)d,其中每个值x最多匹配一个值y,反之亦然.
结果应如下所示:
x y w
1 2 7 5
2 3 5 6
3 4 6 7
Run Code Online (Sandbox Code Playgroud)
当所有的总和w值最大化,并且每个x …
我正在努力实现lpSolve解决方案,以优化假设的日常幻想棒球问题。我在应用最后一个约束时遇到了麻烦:
举例来说,假设您有一个包含1000个球员的数据框,其中包含积分,成本,位置和球队,并且您正在尝试最大化平均积分:
library(tidyverse)
library(lpSolve)
set.seed(123)
df <- data_frame(avg_points = sample(5:45,1000, replace = T),
cost = sample(3:45,1000, replace = T),
position = sample(c("P","C","1B","2B","3B","SS","OF"),1000, replace = T),
team = sample(LETTERS,1000, replace = T)) %>% mutate(id = row_number())
head(df)
# A tibble: 6 x 5
# avg_points cost position team id
# <int> <int> <chr> <chr> <int>
#1 17 13 2B Y 1
#2 39 45 1B P 2
#3 29 33 1B C 3
#4 38 31 …Run Code Online (Sandbox Code Playgroud)