标签: mathematical-optimization

当某些参数已知时如何处理optim?

我在将参数传递给 时遇到了问题optim。例如,假设我想对多元函数进行框约束最小化

fr <- function(x) {   ## Rosenbrock  function
  x1 <- x[1]
  x2 <- x[2]
  x3 <- x[3]
  x4 <- x[4]
  100 * (x2 - x1 * x1)^2 + (1 - x1)^2 +
  100 * (x3 - x2 * x2)^2 + (1 - x2)^2 +
  100 * (x4 - x3 * x3)^2 + (1 - x3)^2
}
Run Code Online (Sandbox Code Playgroud)

像往常一样optim可以使用如下:

optim(par = c(0, 1, 1, 2), fr, method = "L-BFGS-B", lower = c(0, 0, 0, 0), upper = …
Run Code Online (Sandbox Code Playgroud)

r mathematical-optimization

1
推荐指数
1
解决办法
3202
查看次数

如何加速求解 MIP 模型的 GLPK

我正在使用 GNU glpk 求解器解决混合整数规划(MIP) 问题。该问题包含大约 1,625 列和 507 行,我认为这不是一个大规模问题。但是,glpk 在解决问题超过 9 小时后未能提供解决方案。

我想知道是否有人遇到过类似的问题或有任何加快计算速度的建议。否则,您是否有任何其他 MIP 求解器建议我可以尝试对源代码进行少量更改?

optimization mathematical-optimization linear-programming glpk

1
推荐指数
1
解决办法
3665
查看次数

在不明确定义梯度的情况下优化 scipy 中的函数

我目前正在尝试使用 scipy 优化函数。我对变量有一些限制,从这个链接:http : //docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/optimize.html,看来SLSQP正是我想要的。在他们的例子中,他们有一个明确定义的关于输入的结果的明确公式,他们从中找到了梯度。我有一个极其令人厌恶的计算密集型函数,它计算电磁场如何从金属壁反弹,这绝不能以封闭形式表达(如果您有兴趣,我正在使用 MEEP FDTD Python 模拟)。scipy 中是否有一个等效的函数可以为您找到函数的梯度然后进行优化?或者,等效地,是否有一个内置于 scipy 的函数(任何基本的 python 库都可以),它会为我找到函数的梯度,然后我可以将其传递给这个优化程序?任何建议将不胜感激。

python mathematical-optimization scipy meep

1
推荐指数
1
解决办法
3076
查看次数

如何找到不超过某个值的最大项目总和?

如何找到不超过某个值的最大项目总和?例如,我有45个这样的值:1.0986122886681098、1.6094379124341003、3.970291913552122、3.1354942159291497、2.5649493574615367。我需要找到不超过 30.7623 的最大可能组合。

我无法使用暴力来找到所有组合,因为组合的数量将会很大。所以我需要使用一些贪心算法。

python algorithm knapsack-problem mathematical-optimization greedy

1
推荐指数
1
解决办法
1522
查看次数

Python中的运输算法

在谷歌上做了大量搜索后,我无法在 python 中找到任何交通算法求解器。我希望在 Scipy 中找到一些没有用的东西。有人可以指导我找到正确的来源吗?

不知道在哪里发布这个问题,我知道有些策展人会问我代码或说这不是一个合适的地方。在这种情况下,请不要忘记将我引导到正确的地方。

我的问题:

Max(Sum_{i,j}( Cij*Xij) )

x11 + x12 + x13 = D1
X21 + X22 + x23 = D2
X11<10
X23 <100
Run Code Online (Sandbox Code Playgroud)

我通常会有 100,000 个汇(创造需求)和大约 1000 个来源(供应需求)。

algorithm optimization mathematical-optimization scipy python-2.7

1
推荐指数
1
解决办法
5023
查看次数

重新计算平均值

在我的 Java 应用程序中,我需要根据以下数据重新计算平均值:

  1. 我知道当前的平均值 -avgValue
  2. 我知道这avgValue是 12 个值列表的平均值 - count

value根据此信息,当新值添加到之前 12 个值的列表中时,如何重新计算 avgValue 。avgValue13 个值的列表有什么新内容- count + 1

math mathematical-optimization

1
推荐指数
1
解决办法
880
查看次数

线性规划:我可以制定一个目标来同时最大化多个变量吗?

假设我有以下系统说明的一些变量和约束: 在此处输入图片说明 灰线可以拉伸和收缩它们顶部的范围给定的量。蓝线只是端点,显示了灰线如何相互作用。

我的目标:我想使用线性规划来均匀地最大化灰线的大小,如图所示。你可以想象带有弹簧的灰色线条,它们都同样向外推。一个糟糕的解决方案是将所有蓝线尽可能推向一侧。请注意,此描述中有一点余地,并且可能有多种解决方案 - 我所需要的只是让它们合理均匀,并且不要让一个值最大化压扁其他所有内容。

我尝试的目标函数只是最大化线条大小的总和:

maximize: (B - A) + (C - B) + (C - A) + (D - C) + (E - B) + (E - D) + (F - E) + (F - D) + (F - A) 
Run Code Online (Sandbox Code Playgroud)

我很清楚这不是一个好的解决方案,因为这些项相互抵消,并且一条线上的增加只会在另一条线上减少相同的数量,因此目标永远不会偏向于在变量之间均匀分布最大化。

我还尝试将每条线与其中间可能范围的距离最小化。对于 line B - A,其范围内的中间值(1,3)2。这是第一学期的目标:

minimize: |(B - A) - 2| + ...
Run Code Online (Sandbox Code Playgroud)

为了实现绝对值,我将术语替换为U并添加了额外的约束:

minimize: U + ...
with: U <= (B - A - 2)
      U <= -(B …
Run Code Online (Sandbox Code Playgroud)

algorithm mathematical-optimization linear-programming or-tools

1
推荐指数
1
解决办法
742
查看次数

SciPy 的信任构造忽略了我的约束

我正在做一些统计相关的优化。我正在尝试使用 scipy 的最小化。但是,它给我的解决方案并不可行。我的代码是

import numpy as np
from scipy.optimize import minimize, NonlinearConstraint
from math import e

def get_expectation(f,mu):
    return f.dot(mu)

def get_neg_subgaus_coeff(f,mu):
    return -(e**((f/10)**2)).dot(mu)

def grad_neg_subgaus_coeff(f,mu):
    return -(2*e**((f/10)**2)*f)*mu

 def my_mu(n):
    return 1/(np.abs((np.arange(n)-n//2))+1)**2

def get_constraints(n):
    constr_list = []
    for i in range(n-1):

        constr = lambda f: f[i]- f[i+1]
        constr_list.append(NonlinearConstraint(constr,.1, .1))

    return constr_list

def callback(x,_): # not important, only debug info
    print(get_neg_subgaus_coeff(x, mu))
    return False

def get_solution(mu,n):
    constraints = get_constraints(n) + [NonlinearConstraint(lambda f: get_expectation(f,mu), 0, 0)]
    return minimize(get_neg_subgaus_coeff, np.zeros(n)-1, args=(mu),jac=grad_neg_subgaus_coeff, method="trust-constr", bounds=[(-100, …
Run Code Online (Sandbox Code Playgroud)

python math mathematical-optimization scipy

1
推荐指数
1
解决办法
1362
查看次数

如何修改现有 Google OR-Tools 约束编程模型的变量和约束?

我使用 Google OR Tools in Python 编写了一个约束编程模型,它使用 CP 求解器。我需要多次运行该模型,并且在每次运行中我都会修改约束。目前,每次我想运行模型时,我都会从头开始创建模型对象。无论如何,我可以修改现有模型的变量/约束,这样我就不需要每次都从头开始构建模型吗?

为了提供更好的上下文,请考虑以下示例模型。

from ortools.sat.python import cp_model
model = cp_model.CpModel()
num_vals = 3
a = model.NewIntVar(0, num_vals -1, 'a')
b = model.NewIntVar(0, num_vals -1, 'b')
c = model.NewIntVar(0, num_vals -1, 'c')
model.Add(a == b)
solver = cp_model.CpSolver()
solver.Solve(model)
Run Code Online (Sandbox Code Playgroud)

现在,在问题的第二次运行中,我想做以下更改。

  1. 将变量 c 的上限更改为5
  2. 删除约束a==b
  3. 创建新约束a==c

在不从头开始构建模型的情况下如何实现这一目标?

python mathematical-optimization constraint-programming or-tools cp-sat

1
推荐指数
1
解决办法
2187
查看次数

优化点到球体测试的距离

我想测试一个点是否在球体的特定距离内.

所以你有这些变量......

Point3F spherePnt;
F32 sphereRadius;
Point3F testPnt;
Run Code Online (Sandbox Code Playgroud)

我可以...

F32 dist = ( spherePnt - testPnt ).len() - sphereRadius;
Run Code Online (Sandbox Code Playgroud)

如果dist为正,则它在半径之外,如果dist为负,则它在半径内.

或者作为避免len()函数中的平方根的优化,您可以尝试这个...

F32 dist = ( spherePnt - testPnt ).lenSquared() - ( sphereRadius * sphereRadius );
Run Code Online (Sandbox Code Playgroud)

好吧,这看起来像乍看之下,但显然它实际上给了我不正确的结果.

例如,给定的变量就像这样设置......

SpherePnt( 0, 0, 0 )
SphereRadius( 1 )
testPnt( 1, 1, 1 )
Run Code Online (Sandbox Code Playgroud)

取结果......

F32 dist = ( spherePnt - testPnt ).len() - sphereRadius;
F32 dist2 = mSqrt( ( spherePnt - testPnt ).lenSquared() - ( sphereRadius * sphereRadius ) );

dist = 0.7320508075688772935274463415059; …
Run Code Online (Sandbox Code Playgroud)

math optimization mathematical-optimization

0
推荐指数
1
解决办法
957
查看次数