Dr.*_*ius 11
这是一个小Mathematica计划.
虽然它只有两行代码(!),但您可能需要更多的传统语言,以及能够找到最多功能的数学库.
我假设你不熟悉Mathematica,所以我会逐行解释和评论.
首先,我们在{0,1} x {0,1}中创建一个包含10个随机点的表,并将其命名为p.
p = Table[{RandomReal[], RandomReal[]}, {10}];
Run Code Online (Sandbox Code Playgroud)
现在我们创建一个最大化的函数:
f[x_, y_] = Min[ x^2,
y^2,
(1 - x)^2,
(1 - y)^2,
((x - #[[1]])^2 + (y - #[[2]])^2) & /@ p];
Run Code Online (Sandbox Code Playgroud)
哈!语法变得棘手!我们来解释一下:
该函数为{0,1} x {0,1}中的任何点提供从该点到我们的集合p和边缘的最小距离.前四个术语是到边缘的距离,最后一个(难以阅读,我知道)是一个包含到所有点的距离的集合.
我们接下来要做的是最大化此功能,因此我们将得到最大距离到目标的最小距离.
但首先让我们来看看f [].如果你批判地看一下它,你会发现它不是真正的距离,而是距离的平方.我这样定义它,因为这样功能更容易最大化,结果是相同的.
另请注意,f []不是"漂亮"的功能.如果我们在{0,1}中绘制它,我们得到类似的东西:
这就是为什么你需要一个很好的数学包来找到最大值.
Mathematica是一个非常好的包,我们可以直接最大化:
max = Maximize[{f[x, y], {0 <= x <= 1, 0 <= y <= 1}}, {x, y}];
Run Code Online (Sandbox Code Playgroud)
就是这样.最大化函数返回点,并将平方距离返回到最近的边界/点.
HTH!如果您需要帮助翻译成另一种语言,请发表评论.
编辑
虽然我不是C#人,但在寻找SO和google搜索引用之后,来到这里:
一个候选包是DotNumerics
您应该遵循包中提供的以下示例:
file: \DotNumerics Samples\Samples\Optimization.cs
Example header:
[Category("Constrained Minimization")]
[Title("Simplex method")]
[Description("The Nelder-Mead Simplex method. ")]
public void OptimizationSimplexConstrained()
Run Code Online (Sandbox Code Playgroud)
HTH!
| 归档时间: |
|
| 查看次数: |
2760 次 |
| 最近记录: |