我需要最小化一个只允许整数输入的函数。我可以用 解决scipy.optimize.fmin吗?否则,还有其他选择吗?
我已经读到Nelder Mead算法可用于无约束优化。 http://www.scholarpedia.org/article/Nelder-Mead_algorithm 我认为在Matlab中,Nelder Mead也用于无约束的优化。但是,我有点困惑,因为我找到了用于优化的Java API http://www.ee.ucl.ac.uk/~mflanaga/java/Minimisation.html(Flanagan 科学图书馆),该类具有实现Nelder Mead单纯形并允许定义约束和界限。那么,在Flanagan API中实现的版本是否是“经典” Nelder Mead算法的修改版本?
我正在使用 scipy.optimize.linprog 库来使用单纯形法计算最小化。我有两种情况会出现错误:
“ValueError:单纯形法的第 1 阶段未能找到可行的解决方案。伪目标函数的计算结果为 3.1e-12,超出了解决方案“足够接近”零所需的容差 1e-12。一个基本的解决方案。考虑将容差增加到大于 3.1e-12。如果这个容差大得不可接受,则问题可能不可行。”
也许有人会发现问题出在哪里。
Minimaze: 45x1 + 54x2 + 42x3 + 36x4
Subject to: x1 + x2 + x3 + x4 = 1600
30x1 + 60x2 + 70x3 + 80x4 = 100000
30x1 + 40x2 + 0x3 + 20x4 = 30000
Run Code Online (Sandbox Code Playgroud)
我写的代码:
A = np.array([[-30, -60, -70, -80], [-30, -40, 0, -20], [-1, -1, -1, -1]])
b = np.array([-100000, -30000, -1600])
c = np.array([45, 54, 42, 36])
res = linprog(c, A_eq=A, b_eq=b, bounds=(0, None)) …Run Code Online (Sandbox Code Playgroud) 我一直在努力实现Simplex Noise大约一个月,我确实理解使用Simplices来减少所需的计算量以及渐变侧的安全功率.然而,将其实现为任何语言,似乎都是不可能的任务.
在我找到的每一个,每一个,每个代码中,我读到的资源,无处不在,代码似乎都有一个G和一个P表.从一些谷歌搜索和询问周围我了解到他们是一个排列和一个渐变表.他们在做什么?我们为什么需要它们?
我目前的想法是排列表只包含随机值,因此不必在运行时计算它们.
例子:
所以我发现这个有用的网站有很多代码和解释perlin和单纯形噪声.但是,代码是用不同的语言编写的.我能够为java重写大部分内容,但是有一个函数1.我不明白,而且2.我不知道如何在java中编写它.代码是:
function IntNoise(32-bit integer: x)
x = (x<<13) ^ x;
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end IntNoise function
Run Code Online (Sandbox Code Playgroud)
同样,我不知道它是用什么语言编写的.但是,作者声明该函数返回-1到1之间的随机数.有人可以解释&符号的确切含义吗?为什么有一堆看似随机的数字呢?有没有一种简单的方法将其转换为java?