标签: mathematical-optimization

应用 lpSolveAPI

我有许多变量表示我可以更换的设备。更换后,它们会改善影响指标[I]。每个还具有相关的年度成本节省[S]和更换成本[C]

n <- 1000 # variable count

# impact
# negative for use in minimization function
I <- -rnorm(n, mean=20000, sd=8000)
# cost savings
s <- rnorm(n, mean=2500, sd=1000)
# replacement cost
c <- rnorm(n, mean=15000, sd=5000)
Run Code Online (Sandbox Code Playgroud)

我想选择要替换的组件,以在预算范围内最大限度地发挥全面影响,同时仍然确保整个项目(作为一个整体)满足简单的投资回收目标。

payback_goal <- 3
budget <- 1000000
Run Code Online (Sandbox Code Playgroud)

这个问题由下面的方程描述。

在此输入图像描述

我正在努力设置这个lpSolveAPI。具体来说,我不知道如何合并方程式。3.

library(lpSolveAPI)
m <- 2 # number of constraints, disregarding binary constraint set by type
my.lp <- make.lp(m, n)
set.row(my.lp, 1, c)
# i don't think this …
Run Code Online (Sandbox Code Playgroud)

r mathematical-optimization linear-programming lpsolve

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

合并和分割重叠的矩形以产生不重叠的矩形

我正在寻找一个算法如下:

给定一组可能重叠的矩形(所有这些都是"未旋转",可以统一表示为(左,上,右,下)连音符等...),它返回一组最小(非旋转)非重叠的矩形,占据相同的区域.

乍一看似乎很简单,但是很容易变得棘手(至少要有效地完成).

这个/ ideas /指针有一些已知的方法吗?

不一定是最小但是启发式小的集合的方法也很有趣,所以产生任何有效输出集的方法也是如此.

algorithm graphics mathematical-optimization rectangles computational-geometry

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

如何在C#中计算这种类型的方程(x ^ 1 + ... x ^ n)?

我有一个数学问题,写得像这样:

x^1+x^2+x^3+...+x^n
Run Code Online (Sandbox Code Playgroud)

C#中是否有任何构造可以帮助我解决这些方程?

我知道我可以写一个for循环或者使用递归来完成这个,但是我记得在c#中读到一些预编译这样一个语句以便以后执行的构造.

有没有什么有趣的方法可以解决这些方程?

c# math mathematical-optimization

3
推荐指数
3
解决办法
3005
查看次数

随机数绝对1或-1

问题很简单.我需要一个行命令,比如

Math.round((-Math.random() * 2))
Run Code Online (Sandbox Code Playgroud)

,在输出中显示1-1.我试图解决它,但这似乎不是一件容易的事!我可以使用IF命令,

demo = (Math.random()>.5)?(1):(-1);
Run Code Online (Sandbox Code Playgroud)

但我需要更快的东西,比如数学公式.

random math flash mathematical-optimization actionscript-3

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

NMinimize吃掉所有不必要的符号工作的记忆

下面的代码是一种天真的方法来查找其正方形具有n个除数的最小数字(最小值应为其对数,x_i为其素数因子分解中的幂).如果我看一下n = 2000的情况并且使用十个变量而不是二十个变量,那么这将使用大约600MB的内存.使用n的值我实际上试图找到答案,我需要大约20个变量以确保不会错过实际的解决方案,并且它会快速耗尽所有可用内存然后打开交换.

n=8*10^6;
a = Table[N[Log[Prime[i]]], {i, 20}];
b = Table[Subscript[x, i], {i, 20}];
cond = Fold[And, Product[2 Subscript[x, i] + 1, {i, 20}] > n,
   Table[Subscript[x, i] >= 0, {i, 20}]] && b \[Element] Integers;
NMinimize[{a.b, cond}, b, MaxIterations -> 1000]
Run Code Online (Sandbox Code Playgroud)

事实证明,问题与整数编程等无关(取消对整数的限制没有帮助).

我最好的猜测是问题是Mathematica浪费了所有内存扩展Product[2 Subscript[x, i] + 1, {i, 20}].如果我用just替换产品Product[Subscript[x, i],{i,20}]并更改约束>= 1而不是0我没有麻烦得到结果,并且没有内核使用超过50MB的内存.(虽然这保留了不等式约束并且没有改变最小化目标函数的任务,但它确实搞乱了完整性要求 - 我得到了甚至结果,这对应于实际问题中的半整数.)

StackOverflow上的一个人有类似的问题; 在他们的情况下,他们有一个客观的功能,正在以巨大的代价象征性地进行评估.他们能够通过使函数只接受数字输入来有效地修复它,从而有效地将它隐藏在Mathematica的"我有扩展[]锤子之后,一切看起来像钉子"的倾向.但是你不能隐藏这种函数背后的约束(Mathematica会抱怨它是一个无效的约束).

有关如何解决此问题的任何想法?

编辑:我知道正确的答案 - 在我的Mathematica代码不起作用之后我使用了AMPL和一个专用的MINLP解算器来获得它(很快).我只是想知道我怎么能希望能够在将来使用Mathematica的内置非线性优化功能,尽管当我以我知道的唯一方式进入它们时,它似乎与我的约束有关.

optimization wolfram-mathematica mathematical-optimization

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

查找数字优化的所有除数

我编写了以下函数,它找到给定自然数的所有除数,并将它们作为列表返回:

def FindAllDivisors(x):
    divList = []
    y = 1
    while y <= math.sqrt(x):
        if x % y == 0:
            divList.append(y)
            divList.append(int(x / y))
        y += 1
    return divList
Run Code Online (Sandbox Code Playgroud)

它的效果非常好,除了当输入是一个18位数字时它真的很慢.你对我如何加快它有什么建议吗?

更新:

我有以下方法来检查基于费马小定理的素数:

def CheckIfProbablyPrime(x):
    return (2 << x - 2) % x == 1
Run Code Online (Sandbox Code Playgroud)

检查单个数字时,此方法非常有效,但是我不确定是否应该使用它来编译所有素数到一定的边界.

python math mathematical-optimization

3
推荐指数
1
解决办法
2万
查看次数

使用scipy.optimize.brute最小化给定时间间隔内的函数

我试图在给定的时间间隔内最小化函数; 在我的情况下,间隔是[-pi/2, pi/2].

这是我在我的脚本中写的:

ranges = slice(-pi/2, pi/2, pi/200)
res = optimize.brute(g, (ranges,))
Run Code Online (Sandbox Code Playgroud)

def g(x):
    # z and a are global
    (-(z+1) * (((a/4) * (3*cos(x/3) + cos(3*x/2)) +
                (b/4) * (-3*sin(x/2)-3*sin(3*x/2)))**2 +
               ((a/4??) * (sin(x/3) + sin(3*x/2)) + (b/4)*
                (cos(x/2) + 3*cos(3*x/2)))**2) + 4*(c*cos(x/2))**2)
Run Code Online (Sandbox Code Playgroud)

结果res

array([-3.14159265])
Run Code Online (Sandbox Code Playgroud)

我在绘制解决方案时遇到的问题是最小化的一些解决方案超出了间隔[-pi/2, pi/2].有帮助吗?

python mathematical-optimization scipy

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

具有约束的R线性模型

我想要拟合一个线性模型

y ~ a_1 * x_1 + ... + a_n * x_n
Run Code Online (Sandbox Code Playgroud)

带参数约束

a_1,...,a_n >=0 
Run Code Online (Sandbox Code Playgroud)

a_1 + ... + a_n <= 1 
Run Code Online (Sandbox Code Playgroud)

在R.

是否有一种优雅而快速的方法,而不使用quadprog软件包的solve.QP.如果针对提议的解决方案概述一个简短但详细的用例,那将是非常好的.

r mathematical-optimization

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

scipy.optimize.minimize的精度

我试图计算函数的最小点

f(x)=(x-2e-17)*(x-2e-17)

scipy.optimize.minimize.预期的,精确的结果是2e-17.但无论我怎么微调耐性的参数xtolftolscipy.optimize.minimize,它仍然只给出了不准确的结果0(见下文).我们怎样才能让scipy返回 准确的答案?谢谢.

In [35]: scipy.optimize.minimize(lambda x: (x-2e-17)**2,2,method='Powell',options={'xtol': 1e-30, 'ftol': 1e-30})
Out[35]:
  status: 0
 success: True
   direc: array([[ 1.]])
    nfev: 20
     fun: array(4.0000000000000006e-34)
       x: array(0.0)
 message: 'Optimization terminated successfully.'
     nit: 2
Run Code Online (Sandbox Code Playgroud)

floating-point precision mathematical-optimization scipy

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

将Excel解算器解决方案转换为Python纸浆

我发现很难将Excel Solver模型转换为python pulp语法.在我的模型中,我正在优化每个部门的HC和OT变量,目标是最小化OT变量的总和.约束要求HC变量总和不超过92,并且总生产(=E2*C2*D2 + F2*C2在下面的电子表格中)满足每部门要求(下面的Excel电子表格的"输入"列).下面显示的Excel求解器公式非常有效.

问题

  1. 如何在纸浆中编写目标函数(在Excel F7 = SUM(F2:F6)中)?
  2. 约束E7 <= 92
  3. 约束G2:G6> = B2:B6
  4. 我有两个决策变量HCOT.在下面的python代码中,我只创建了一个变量.

之前

在此输入图像描述

解决之后

在此输入图像描述

import pulp
import numpy as np
import pandas as pd

idx = [0, 1, 2, 3, 4]

d = {'Dept': pd.Series(['Receiving', 'Picking', 'PPicking', 'QC', 'Packing'], index=idx),
     'Target': pd.Series([61,94,32,63,116], index=idx),
     'Hrs/day': pd.Series([7.75, 7.75, 7.75, 7.75, 7.75], index=idx),
     'Prod': pd.Series([11733, 13011, 2715, 13682, 14194], index=idx),
     'HC': pd.Series([24,18,6,28,16], index=idx), 
     'OT': pd.Series([0,0,42,0,0], index=idx)}

df = pd.DataFrame(d)

# …
Run Code Online (Sandbox Code Playgroud)

python math mathematical-optimization linear-programming pulp

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