- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我突然想到,使用随机数来选择 parent
就像赌博轮盘赌
可能是可行的。让我用一个例子来解释求函数的最大值
。示例如下:
n
个随机个体
并计算了它们的函数值
。我们将个体命名为'j'Xj
,其函数值名称为f(Xj)
。我们找到并命名最大函数值maxValue
。个体j的适应度
为f(Xj)/maxValue
。我们可以将其命名为g(Xj)
.然后我们计算个体的所有适应度。 parent
。(我们放弃适应度值小于0的个体)。一个经典的方式是赌博轮盘赌
。选择Xj
和Xk
的几率是g(Xj)*g(Xk)/[g(X1)+g(X2)+...+g (Xn)]^2
.我的想法是
Xj
和Xk
rn
。rn
小于g(Xj)
和g(Xk)
(适应度
Xj
和 Xk
), 则它们能够繁殖。然后交叉和变异。1-3
。选择Xj
和Xk
的几率是g(Xj)*g(Xk)/n^2
,类似于赌博轮盘赌
。考虑两个机会的分母都是常数值,它们在某种程度上是相等的。
double randomNumToJudge=Math.random();//generate a random number to judge with the fitness
int randomMother=(int)(Math.random()*1000);
int randomFather=(int)(Math.random()*1000);//random generate parents
if((randomNumToJudge<=individualArray[generation][randomFather].fitnessValue)
&&(randomNumToJudge<=individualArray[generation][randomMother].fitnessValue))
//if the number is less than both fitness of parents,they are permited to reproduce.
{
Individual childIndividual=individualArray[generation][randomFather].crossOverAndMutate(individualArray[generation][randomFather], individualArray[generation][randomMother]);
//Crossover and mutate and generate child individual
individualArray[generation+1][counter]=childIndividual;//add childIndividual to tha Array.
counter++;//the count of individual number in child generation
}
我在java代码中这样测试。函数是x + 10sin(5x) + 7cos(4x), x∈[0,10)
。我生成100代和个体数在一代人中是 1000。
它的结果是正确的。
在某次执行中,在第100代中,我发现最好的个体是7.856744175554171
,最好的函数值是24.855362868957645
。我测试了10次,每100代结果都精确到小数点后10位。
那么这种方式可行吗?这种方式是否已经被其他人想到了?
如有任何意见,我们将不胜感激^@^
PS:请原谅我糟糕的英语-_-
最佳答案
请注意我已经编辑了这个答案。
从第 2 点开始,我假设您的目标适应度为 1。您的算法可能永远不会完全收敛(找到局部最小值)。这是因为即使您的适应度发生变化,您的随机值范围 (0~>1) 也不会发生变化。
请注意,这并不意味着没有创建更好的适应性;他们会。但是由于您正在检查适应度(随机 0~>1),因此创建更好适应度的速度会急剧下降。
考虑这个例子,其中所有适应度都收敛为高:
[0.95555, 0.98888, 0.92345, 0.92366]
这里,所有的值都极有可能满足randomNumToJudge<=fitness
.这意味着任何值被选为父值的可能性相同。您不希望这样 - 您希望最佳值有更高的机会被选中。
如果您设置randomNumToJudge
,您的算法可以被修改以正确收敛有一个范围(人口中的适应度中值 ~> 1),尽管这仍然不是最优的。
替代方法
我建议实现经典 roulette wheel方法。
轮盘赌方法根据每个人的“适合度”为他们分配被选为 parent 的概率。从本质上讲,适应度越大,个体占据的轮子的切片就越大,随机数在轮子上选择这个位置的机会就越大。
关于java - 这种选择 `parent`像 `gambling roulette `的方法可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53967728/
有人知道 1u 在这个函数中的作用吗?以下函数接受一个整数并打印出它的位。我试图弄清楚的线是 putchar 线。我看到它需要一个无符号整数作为参数,并在二进制数大小的循环中迭代 1 或 0,这恰好发
我有一个 MySQL 数据库,存储了一个长而详细的时间序列(即,每分钟采样多次的多年测量值)。当我将此数据提供给客户端进行显示时,我想对数据进行下采样,这样我就不会向图表发送大量数据。例如,如果客户端
我有一个记录文章浏览量的表格。它有以下列: id, article_id, day, month, year, views_count. 假设我想跟踪每篇文章的每日浏览量/每一天。如果我有 1,000
写一个很长(200多行)的测试方法是不是太糟糕了?或者我应该把它分解成更小的方法? 最佳答案 您不应该(总体上)创建任何 200 行长的方法。如果你能打破它,就去做。 你在 200 行中做什么?单元测
我正在使用 SQL Server 2008-R2,但我也对更通用的答案感兴趣...... 我有一个包含数亿行的表,每行都有一个“DateModified”字段 (datetime2(7)) 现在我经常
SwiftMailer 需要一个电子邮件地址数组,可能包括名称作为数组的值: $message->setTo([ 'person1@example.org', 'person2@example
这个问题已经有答案了: MySQL - how many rows can I insert in one single INSERT statement? (8 个回答) 已关闭 3 年前。 我需要
我需要一个只有 n 行的 mysql 表。是否可以?有 1 行表的解决方案,但无法找到 n 行的任何内容。 最佳答案 如果您确实想在 mysql 中执行此操作,则必须编写一个触发器,每当插入行时都会调
我的日志文件很长,是否可以要求 grep 只搜索前 10 行? 最佳答案 管道的魔力; head -10 log.txt | grep 关于bash - 我可以只 grep 文件的前 n 行吗?,我
曾几何时,我有一张这样的 table : CREATE TABLE `Events` ( `EvtId` INT UNSIGNED NOT NULL AUTO_INCREMENT, `Al
我最近发现 dask旨在成为易于使用的python并行处理模块的模块。对我来说最大的卖点是它适用于 pandas。 在其手册页上阅读了一下之后,我找不到一种方法来完成这个琐碎的可并行化任务: ts.a
我刚刚安装并设置了一个 Doxygen 实例,但开箱即用时,它只能在代码中找到 TODO 标记,当标记在如下块中时: /** * @todo Foo */ 它似乎没有找到: // TODO Foo
我想知道这里有什么最佳实践。我正在制作一个表单,该表单具有通过 form-group 类分组的控件。这具有水平分组的控件,例如一行中的标题、名字、姓氏,然后下一行可以有日、月、年输入。 为了在一行中实
我想执行一个 MySQL 查询: SELECT * FROM table_A JOIN table_B on table_A.id = table_B.foreign_key …但我想返回表_B 中表
行不通,而嵌套
我一般不会嵌套像这样: The following: one two 我将使用 像那样嵌套反而。但是今天我用了但似乎 Emacs 和 Google Chrome 都会考虑外部 一看
我有这个代码 my $tmp = $q->param('owner'); $tmp =~ s/\s*//g; # remove white space from string my @owners
我有这些 div,每个都有相同的类 .onediv 和不同的 ID div1、div2、div3 我想使用 jquery 来改变它们的 css di
我正在阅读此文档:http://software.intel.com/en-us/articles/interactive-ray-tracing 我偶然发现了这三行代码: The SIMD vers
我需要通过调用 API 端点和数据格式为 JSON 来消耗大量数据(比如超过 100000 行)并将它们显示在 react 页面中。我正在使用 React-Table 开发逻辑,但想听听专家的意见,以
我正在尝试添加一条 GeoJSON 线来显示 A 点和 B 点之间的汽车方向(就像在 mapbox-gl-js 的官方文档中那样(https://www.mapbox.com/mapbox-gl-js
我是一名优秀的程序员,十分优秀!