通过适应度函数从群体中选择个体

2024-01-04

我一直在研究一种算法,我需要从大小为 k 的群体中选择 n 个个体,其中 k 比 n 大得多。所有个体都有适应度值,因此选择时应优先考虑较高的适应度值。然而,我不想简单地选择最好的n个人,最差的人也应该有机会。 (自然选择)

因此,我决定找到人群中的最小和最大适应度值。所以,任何一个人都会有

p =(电流 - 最小值)/(最大值 - 最小值)

概率被选择,但我不能只是迭代所有的人,掷骰子并选择一个如果概率成立的话,因为那样我最终会得到超过 n 个个体。我可以打乱列表并从前面迭代,直到获得最多 n 个个体,但这可能会错过列表末尾的重要个体。

我还可以执行多次传递,直到剩余的种群数量达到 n。但这可能会更倾向于更好的选择,并收敛到我提到的朴素选择方法。

对这样的选择过程有何建议或参考?如果您可以参考的话,我可以阅读一些相关的统计方法。

Thanks.


Use 轮盘赌选择 http://en.wikipedia.org/wiki/Fitness_proportionate_selection。基本思想是根据概率大小分配轮盘赌轮的区域:

然后你只需旋转它n时间来选择您想要的人。

ruby 中的示例实现:

def roulette(population, n)
  probs = population.map { |gene| gene.probability } # TODO: Implement this
  selected = []

  n.times do 
    r, inc = rand * probs.max, 0 # pick a random number and select the  individual 
                     # corresponding to that roulette-wheel area
    population.each_index do |i| 
      if r < (inc += probs[i])
        selected << population[i]
        # make selection not pick sample twice
        population.delete_at i
        probs.delete_at i
        break
      end
    end
  end
  return selected
end

注意:如果您是 Ruby 黑客,您会发现使用更多 Rubyism 代码可能会更短,但我希望算法尽可能清晰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过适应度函数从群体中选择个体 的相关文章

  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 归并排序中递归树的高度log(n)+1是怎么来的

    我按照 stackoveflow 的建议阅读了一些问题和答案 我正在遵循 cormen 的 算法简介 一书进行自学 那本书里已经解释得很清楚了 但唯一没有解释的是如何在合并排序分析中计算树的高度 如果在后面的章节中对此进行解释的话 我仍然在
  • 负整数的基数排序

    我正在尝试对整数 包括负整数 实现基数排序 对于非负整数 我计划为数字0 9创建一个10个队列的队列 并实现LSD算法 但我对负整数有点困惑 我现在的想法是继续为它们创建另一个包含 10 个队列的队列 并分别对它们进行排序 然后在最后 我将
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • 使用面向对象的分析和设计对电梯进行建模[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 当涉及到面向对象的设计和分析时 有一组问题似乎在面试和课堂上很常见 这是其中之一 不幸的是 我在大学的 OOP 教授从未真正给出过答案 所以我一
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • 如何使用 python 有效地找到两个大文件的交集?

    我有两个大文件 它们的内容如下所示 134430513125296589151963957125296589 该文件包含未排序的 id 列表 某些 id 可能会在单个文件中出现多次 现在我想找到路口两个文件的一部分 这就是两个文件中都出现的
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 使用 A 星查找路径的启发式函数

    I am trying to find a optimal solution for the following problem 每个节点内表示的数字表示为 x y 一个节点的相邻节点总是有一个y值为 当前节点 y 值 1 更改的成本为 1

随机推荐

  • 使用 JFrame 和 JPanel 的简单 Java 动画

    好的 所以该程序的目的只是绘制椭圆形并将其移动到屏幕上 该代码在 Eclipse 上编译时没有错误 但运行时 没有在屏幕上绘制或移动椭圆形 我一直在研究 似乎线程必须为此做很多事情 但是我需要一个线程来完成这个简单的程序吗 显然 我对使用
  • 如何判断B类是否是A类的子类?

    看来如果你为 Mac OS 开发 NSObject有isSubclassOfClass方法 但是当我检查同一个类的 iOS 类引用时 它没有该方法 并且 Xcode 抱怨该方法 我目前的解决方案是放置一个方法 void iAmClassB在
  • DataView RowFilter 中的撇号

    我有一个 DataView 我试图根据动态字符串进行过滤 dv RowFilter ContentTitle titleFilter 在某些情况下 titleFilter包含撇号 它会关闭过滤器查询并导致错误 有什么办法可以摆脱这个角色吗
  • 对微服务的 XA 支持

    Scenario 我有多个符合 XA 的数据库 前端有不同的微服务 这些微服务对它们执行 CRUD 操作 我需要在这些微服务之间执行两阶段提交 这意味着我有一个正在运行的服务器 它对这些微服务进行 API 调用以进行一些更新 并且这些更新应
  • 如何停止 Microsoft 认知 TTS 音频播放?

    我正在使用 Microsoft 认知服务语音 SDK 的 JavaScript 版本https github com Azure Samples cognitive services speech sdk https github com
  • PyQt 对齐复选框并将其放在每一行中

    我正在尝试做this http falsinsoft blogspot ro 2013 11 qtablewidget center checkbox inside cell html与复选框 遗憾的是 它是为 C 编写的 并且对 Pyth
  • 为什么我收到未读块数据 - 非法状态异常?

    我只有以下内容 JavaPairRDD
  • java单例模式,所有变量都应该是类变量吗?

    如果一个类实现了单例模式 是否应该将所有变量声明为静态 有什么理由不应该将它们声明为静态吗 这有什么不同吗 不 单例模式只是意味着单个实例是唯一的实例 它并不意味着 使所有内容都可以静态访问 单例模式为您提供 单实例 的所有好处 而不牺牲测
  • 使用 new 创建时命名 ValueTuple 属性

    我知道当我隐式创建元组时可以命名参数 例如 var me age 21 favoriteFood Custard 显式创建元组时是否可以命名参数 IE var me new ValueTuple
  • ruby 中的块作用域

    我的理解是 ruby 块具有块作用域 并且在块内创建的所有变量将仅存在于该块内 案例示例 food toast cheese wine food each food puts food capitalize puts food Output
  • Woocommerce 按属性搜索

    我在默认的 woocommerce 搜索系统中遇到了一个小问题 我需要开设一家基于 WooCommerce 的书店 所有这些书籍都包含独特的属性 例如标识号和 ODN 或 IBN 现在我需要一个搜索栏 如果我在搜索栏中输入任何独特的属性 例
  • 什么控制 git checkout 反馈?

    有时一个git checkout命令给出进度反馈 git checkout develop Checking out files 100 10779 10779 done Switched to branch develop 有时它不会 下
  • Python中获取总物理内存

    如何以与分布无关的方式获取 Python 中的总物理内存 我不需要已用内存 只需要总物理内存 跨平台解决方案的最佳选择是使用psutil https github com giampaolo psutil包 可在PyPI https pyp
  • Helvetica 在 Windows 操作系统上呈现为 Arial

    在我的网站上 http helvetitee com http helvetitee com 我有以下字体堆栈 font family helvetica neue helvetica nimbus sans Nimbus Sans 一种网
  • 用 Coq 重写假设,保留蕴涵

    我正在做 Coq 证明 我有P gt Q作为假设 并且 P gt Q gt Q gt P 作为引理 如何将假设转化为 Q gt P 当我尝试apply它 我只是产生新的子目标 这没有帮助 换句话说 我想从以下开始 P Prop Q Prop
  • 清除 woocommerce 中的结账字段

    我正在尝试删除各个结账字段中自动加载的用户信息 但似乎找不到任何方法来访问字段值 我已经尝试了以下清除格式 删除 字段等的操作 但我找不到任何内容显示如何仅删除该值 有谁知道如何访问这个 add filter woocommerce che
  • 如何使用 ADB 生成 Android 中的捏合等多点触控事件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想通过 ADB 命令行在 Android 中生成多点触控 捏合 的输入事件 现在我可以使用以下命令生成触摸屏滑动事件 input t
  • 每个项目类型都有单独的资源字典

    我已经在我的共享项目中创建了一个 ResourceDictionary 没有任何问题 然而 我的一些样式对于 Windows Phone 8 1 来说非常特殊 并且不会在 Windows 8 1 中使用 由于Windows Phone项目中
  • OwinContext.Request.Path 和 PathBase 是如何填充的?

    我正在根据 Katana 项目中的其他示例为 OpenID Connect 授权代码流程编写自己的 OWIN 中间件 作为此过程的一部分 我必须构造几个 URI 例如重定向 URI 和返回 URL Katana 中的其他示例通过连接当前请求
  • 通过适应度函数从群体中选择个体

    我一直在研究一种算法 我需要从大小为 k 的群体中选择 n 个个体 其中 k 比 n 大得多 所有个体都有适应度值 因此选择时应优先考虑较高的适应度值 然而 我不想简单地选择最好的n个人 最差的人也应该有机会 自然选择 因此 我决定找到人群