- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个相当复杂的算法来执行搜索,其中我使用某个范围 [0.25 到 1.75] 中的 $search
变量。
根据该算法,当 $search
恰好为 1 时,会发生一件“有趣”的事情,因为它命中了一个变量配置,有时(但不是总是)最有利的。一些代码依赖于 $search
恰好为 1 来产生最有利的结果。
更具体地说,搜索范围内通常有一些特定值,这会产生最有利的结果,但我的算法布局方式通常会跳过该特定值。在这里,我举例说明了特定值(基于其他输入和配置)恰好是 1..
问题
从数学上讲,如果 $search
是连续的而不是离散的,我就不会有这个问题。我的问题是尝试使用离散数学收敛于最有利的变量配置。这里的问题是算法。需要注意的次要问题是浮点运算,但我认为这还不是这里的问题。
基本循环:
$maxPowerOut = 0 ;
for ($increment = 0; $increment <= 500; $increment ++)
{
//vars computed elsewhere, i.e:
//MIN = 0.24651533;
//STEP = 0.00196969
$search = MIN + STEP * $increment;
//compute several coefficients (returns an array)
$coeff = $this->coefficient($search);
//design is a complex library function
list($a, $b) = $this->design($coeff);
$powerOut = $a * $b;
//keep track of max power (and other params, not shown)
if ($powerOut > $maxPowerOut)
$maxPowerOut = $PowerOut;
}
//currently prints 899.993 instead of 900 as should be expected
print "Max Power is $maxPowerOut";
自然地,$search
几乎永远不会是 1。它是这样的:
请注意在上面的循环中如何跳过 1。为了争论起见,我们假设最有利的位置发生在 1.003000。该值 (1.003000) 也将被跳过。
问题
我该如何改进、重构、重新思考、重组、重写我的循环以避免此类问题?
最佳答案
一个简单的改进可能是使用迭代方法:
在您当前的循环中,您搜索区间 [0.25, 1.75] 中的 500 个值。假设您可以通过这种方式将最优值缩小到更小的区间 [0.995, 1.007]。然后再次将这个间隔分成 500 个值并重复你的循环。重复直到达到所需的精度。
从数学上讲,您想在函数 f:search -> power
的给定区间内找到最大值,该函数为给定的 search 计算一些
参数。请注意,您的函数 power
值f
越平滑,这通常越容易。要了解 f
可能是什么样子,您可以根据您在循环中计算的值绘制函数。
如果您的函数表现良好并且是单峰的(只有一个“驼峰”),那么例如一个简单的 golden section search会很有效。
关于php - 如何克服当前跳过循环内某个实数的数值算法的离散性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335604/
据我所知,Marketo 将 REST API 请求的数量限制为每天 10,000 次。有没有办法克服这个限制?我可以支付并获得更多吗? 我发现 REST API 请求和 SOAP API 请求是分开
有谁知道有什么方法可以克服 NotSupportedException?我有一个针对用户的方法: public virtual bool IsAbove(User otherUser) {
我们最近从关系型 (MySQL) 转向 NoSQL (couchbase)。基本上它是社交手机游戏的后端。我们在扩展后端以处理越来越多的用户时面临着很多问题。当使用 MySQL 时,由于多个表之间存在
我当前用来收集文本的函数 InputBox 显然不能接受超过 255 个字符,并且我需要能够收集更多字符?我可以使用参数或不同的函数来增加此限制吗? 最佳答案 说句迂腐的话,输入框允许您输入最多 25
我是近似字符串匹配领域的新手。 我正在探索 Bitap algorithm 的用途,但到目前为止,它有限的模式长度让我很困扰。我正在使用 Flash,处理 32 位无符号整数和一个 IEEE-754
克服 PHP 中的大海捞针困惑的最实用方法是什么? 这里 $needle 是第一个参数 bool in_array ( mixed $needle , array $haystack [, bool
我有一个无法更改的客户端类。 List list1= Arrays.asList(1,2,3); System.out.println("Total sum is:"+sum(list1)); pri
我们都知道,在 Java 中,如果在 Abstract 类中声明一个 static 方法,该方法将属于 Abstract 类,而不是它的 child 。 (没有抽象静态) 我有一个简单的数据库系统,它
我有 4 个表和这个查询 SELECT tag.id, title FROM tag LEFT JOIN tag_map ON ( tag.id = tag_map.tag_id ) LEFT JOI
我有 4 个表和这个查询 SELECT tag.id, title FROM tag LEFT JOIN tag_map ON ( tag.id = tag_map.tag_id ) LEFT JOI
在 Swift 中,一切都以结构而不是类的形式实现。正在传入值,但内存地址不存储它们。这是一个例子: import UIKit var array = Array() array = [6,2,9,1
在我编写的 C++ 程序中: #include #include using namespace std; int main() { vector a; a.resize(1); f
我正在尝试使用 php_ldap(使用 ADLdap)从 Ubuntu(hardy 8.04LTS)主机绑定(bind)到 AD。在端口 389 上绑定(bind)到 ldap://myserver
这个问题在这里已经有了答案: Low picture/image quality when capture from camera (3 个答案) 关闭 5 年前。 我想从相机拍照并上传到服务器,但
我想将 unsigned char[8] 分配给 uint64(c 语言),使用 RPC 传递此值,并将 uint64 转换回具有相同字节顺序的 unsigned char[8](cpp 语言)。问题
Python 似乎对实例方法有一些限制。 无法复制实例方法。 不能 pickle 实例方法。 这对我来说是有问题的,因为我的工作是非常面向对象的 project我在其中引用了实例方法,并且同时使用了深
我理解这个问题,根据答案 here ,但是,我真的可以使用帮助或更详细的代码解释来说明它是如何克服的。 我的情况是这样的:我曾经将模型和 Controller 分开,在我的模型包中我有一个包含所有模型
假设我从这样的 Akka Persistence 系统开始: case class MyMessage(x: Int) class MyProcessor extends Processor {
我正在寻找在构建重量级 Windows 界面时处理用户对象句柄限制的高级策略。请说明您如何使用 SWT 或直接 Windows GUI API 克服或绕过此问题。我唯一不感兴趣的是优化小部件使用的策略
我有一个我知道过去的日期列表,但格式为 28/MAY/13 .用它们制作日期类的最接近的方法是基本的 dates as.Date("2013-12-31")] as.Date("2013-12-3
我是一名优秀的程序员,十分优秀!