找到最小化 c 的向量 x 。x 受约束 m 。x >= b,x 整数。
这是一个示例输入集:
c : {1,2,3}
m : {{1,0,0},
{0,1,0},
{1,0,1}}
b : {1,1,1}
Run Code Online (Sandbox Code Playgroud)
有输出:
x = {1,1,0}
Run Code Online (Sandbox Code Playgroud)
什么是解决此类问题的好工具,以及如何使用它们的示例?
我试图为给定的H生成以下方程的所有解.
H = 4时:
1) ALL solutions for x_1 + x_2 + x_3 + x_4 =4
2) ALL solutions for x_1 + x_2 + x_3 = 4
3) ALL solutions for x_1 + x_2 = 4
4) ALL solutions for x_1 =4
Run Code Online (Sandbox Code Playgroud)
对于我的问题,总有4个方程要解决(独立于其他方程).总共有2 ^(H-1)个解决方案.对于前一个,这里是解决方案:
1) 1 1 1 1
2) 1 1 2 and 1 2 1 and 2 1 1
3) 1 3 and 3 1 and 2 2
4) 4
Run Code Online (Sandbox Code Playgroud)
这是一个解决问题的R算法.
library(gtools)
H<-4
solutions<-NULL
for(i in seq(H))
{ …Run Code Online (Sandbox Code Playgroud) 给定一个具有两个优化变量 ( x_in(t), x_out(t))的优化问题。对于任何时间步,当x_in非零时,x_out必须为零(反之亦然)。写成约束:
x_in(t)*x_out(t)=0
Run Code Online (Sandbox Code Playgroud)
Matlab 的linprog函数中如何包含这样的约束?
我正在使用lpsolve包进行线性编程,但在其教程中已经阅读过只能解决非负变量的问题.
这是我的代码:
library(lpSolve) #linear programming solver
c = c(30, 18, 20, 23, 24, 26)
a = scan(text="66 89 82 14 35 72")
b = 50
con.qual.s1=scan(text="64 98 17 55 27 80")
con.qual.s2=scan(text="16 59 88 89 60 47")
qual.cons=c(53,82)
n=6 #activities
m=3 #resources
f.rhs = c(b,qual.cons)
f.con <- matrix (rbind(a,con.qual.s1,con.qual.s2,diag.p),nrow=m+nrow(diag.p))
f.obj.d <- c(50,53,82)
diag.d=diag(x = 1, m, m) #non-negativity
f.con.d <- matrix (rbind(t(f.con[1:m,]),diag.d),nrow=n+nrow(diag.d))
f.dir.d <- c(rep("<=",7),rep(">=",2))
f.rhs.d <- c(c,rep(0,m))
of.d=lp ("max", f.obj.d, f.con.d, f.dir.d, f.rhs.d,compute.sens=TRUE)
Run Code Online (Sandbox Code Playgroud)
请注意,忽略约束编号7为非正数的事实.
编辑:我已经为lpSolveAPI包添加了新代码.为了检查是否有效,我为原始问题和双重问题准备了不同的代码. …
设置目标函数和约束后,我使用
prob.solve()
print prob.solution.get_objective_value()
Run Code Online (Sandbox Code Playgroud)
实际上,我只想打印目标值,然而,它显示了很多cplex的信息,
Tried aggregator 1 time.
LP Presolve eliminated 5 rows and 1 columns.
All rows and columns eliminated.
Presolve time = -0.00 sec. (0.00 ticks)
0.5
Run Code Online (Sandbox Code Playgroud)
我只想显示最后一行0.5,如何避免Cplex打印其他信息?先感谢您.
python logging mathematical-optimization linear-programming cplex
我正在尝试编写一个线性程序,并且需要一个等于 xc 符号的变量 z,其中 x 是另一个变量,而 c 是一个常数。
我考虑过z = (x-c)/|x-c|。不幸的是,如果 x=c,那么这会产生除以 0。
我不能使用 z=xc,因为我不想用 x 和 c 之间的差值来加权它。
有谁知道表达 z 的好方法,以便它是 xc 的符号?
感谢您的任何帮助和建议!
我正在尝试用大量变量和约束来解决线性程序.我需要动态生成约束矩阵并在python中构建lp.我可以在Cplex for Python上找到的唯一一个教程是来自IBM的官方教程,这个教程还不太详细.所以我的问题是:首先,一般问题是,是否有更好的教程或有充分记录的内容?第二,一个更具体的问题,在官方教程中,有一个例子显示填充lp的不同方法,问题陈述是:
Maximize
x1 + 2x2 + 3x3
subject to
–x1 + x2 + x3 <= 20
x1 – 3x2 + x3 <= 30
with these bounds
0 <= x1 <= 40
0 <= x2 <= infinity
0 <= x3 <= infinity
Run Code Online (Sandbox Code Playgroud)
并按行填充如下:
def populatebyrow(prob):
prob.objective.set_sense(prob.objective.sense.maximize)
# since lower bounds are all 0.0 (the default), lb is omitted here
prob.variables.add(obj = my_obj, ub = my_ub, names = my_colnames)
# can query variables like the following:
# lbs is a …Run Code Online (Sandbox Code Playgroud) 我在 Python 2.7.8、Windows 32 位上运行 PuLP 编程库。我使用 GLPK 作为混合整数线性规划问题的求解器。求解器收敛到大约。1% 的最优解很快,但是计算精确最优解的时间很长。有没有办法使用 PuLP 为 GLPK 求解器指定百分比容差?我搜索了https://pythonhosted.org/PuLP/solvers.html但它没有为 GLPK 求解器提供任何答案。
仅在Python中,并使用来自Pandas数据帧的数据,我如何使用PuLP以与Excel相同的方式解决线性编程问题?应在新预算栏目下为每个渠道分配多少预算,以便最大化估算成功的总数?我真的在寻找一个使用数据框中数据的具体示例,而不是真正的高级建议.
问题数据设置
Channel 30-day Cost Trials Success Cost Min Cost Max New Budget
0 Channel1 1765.21 9865 812 882.61 2647.82 0
1 Channel2 2700.00 15000 900 1350.00 4050.00 0
2 Channel3 2160.00 12000 333 1080.00 3240.00 0
Run Code Online (Sandbox Code Playgroud)
这是一个最大化问题.
该目标函数为:
objective_function = sum((df['New Budget']/(df['30-day Cost']/df['Trials']))*(df['Success']/df['Trials']))
Run Code Online (Sandbox Code Playgroud)
该限制是:
df['New Budget']必须相等5000New Budget给定信道可以去不低比Cost MinNew Budget给定信道可以走不高比Cost Max有关如何使用PuLP或任何其他求解器方法转换此pandas数据帧求解器线性问题的任何想法?最终结果将是您在下图中看到的结果.
我有一个我想解决的线性整数程序.我安装了解算器glpk(感谢这个答案)和pyomo.我写了这样的代码:
from pyomo.environ import *
from pyomo.opt import SolverFactory
a = 370
b = 420
c = 2
model = ConcreteModel()
model.x = Var([1,2], domain=NonNegativeIntegers)
model.Objective = Objective(expr = a * model.x[1] + b * model.x[2], sense=minimize)
model.Constraint1 = Constraint(expr = model.x[1] + model.x[2] == c)
# ... more constraints
opt = SolverFactory('glpk')
results = opt.solve(model)
Run Code Online (Sandbox Code Playgroud)
这产生了文件解决方案results.yaml.
我有很多问题,我想用同样的模式来解决,但不同的a,b和c值.我想指定不同的值a,b和c,解决了模型,得到的解决方案model.x[1]和model.x[2],并有一上市a, …
python optimization mathematical-optimization linear-programming pyomo
python ×4
cplex ×2
optimization ×2
algorithm ×1
constraints ×1
dataframe ×1
diophantine ×1
equation ×1
glpk ×1
logging ×1
lpsolve ×1
math ×1
matlab ×1
modeling ×1
pandas ×1
pulp ×1
pyomo ×1
python-2.7 ×1
r ×1