用遗传算法建立排名,

2023-12-22

BIG 版本后的问题:

我需要使用遗传算法建立排名,我有这样的数据:

P(a>b)=0.9
P(b>c)=0.7
P(c>d)=0.8
P(b>d)=0.3

现在,让我们解释一下a,b,c,d作为足球队的名称,以及P(x>y)是概率x赢与y。我们想要建立团队排名,但我们缺乏一些观察P(a>d),P(a>c)由于a vs d 和a vs c 之间缺少比赛而缺失。 目标是找到最能描述四支球队联盟现状的球队名称排序。

如果我们只有 4 支球队,那么解决方案就很简单,首先我们计算所有球队的概率4!=24四支球队的排序,同时忽略缺失值,我们有:

P(abcd)=P(a>b)P(b>c)P(c>d)P(b>d)

P(abdc)=P(a>b)P(b>c)(1-P(c>d))P(b>d)

...

P(dcba)=(1-P(a>b))(1-P(b>c))(1-P(c>d))(1-P(b>d))

我们选择概率最高的排名。我不想使用任何其他健身功能。

我的问题 :

由于 n 个元素的排列数为n!计算所有的概率 对于大 n 来说,排序是不可能的(我的 n 约为 40)。我想用遗传算法来解决这个问题。

变异运算符是两个(或更多)排名元素位置的简单交换。

但是如何使两个排序交叉呢?

Could P(abcd)被解释为非对称 TSP 问题中路径“abcd”的成本函数,但从 x 到 y 的成本与从 y 到 x 的成本不同,P(x>y)=1-P(y<x)? TSP问题有很多交叉算子,但我想我必须设计自己的交叉算子,因为我的问题与TSP略有不同。您对解决方案或概念分析框架有什么想法吗?

在概念和实现层面上,最简单的方法是使用交叉运算符,它可以在两个解决方案之间交换子顺序:

CrossOver(ABcD,AcDB) = AcBD

对于元素的随机子集(在本例中为大写字母“a,b,d”),我们将第一个子排序 - 元素“a,b,d”的序列复制并粘贴到第二个排序。

Edition:非对称 TSP 可以转化为对称 TSP,但具有禁止的子排序,这使得 GA 方法不适合。


这绝对是一个有趣的问题,似乎大多数答案和评论都集中在问题的语义方面(即适应度函数的含义等)。

我将补充一些有关句法元素的信息——如何以有意义的方式进行交叉和/或变异。显然,正如您在与 TSP 的相似之处所指出的,您遇到了排列问题。因此,如果您想使用 GA,候选解决方案的自然表示就是您的点的有序列表,小心避免重复 - 即排列。

TSP 就是这样一种排列问题,并且有许多交叉算子(例如,边缘组装交叉 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.114.5015)您可以从 TSP 算法中获取并直接使用。但是,我认为您会遇到这种方法的问题。基本上,问题是这样的:在 TSP 中,解决方案的重要质量是邻接。那是,abcd具有相同的适应度cdab,因为这是同一次旅行,只是在不同的城市开始和结束。在你的例子中,absolute立场比这个概念重要得多relative位置。abcd在某种意义上意味着a是最好的一点——重要的是它排在列表的第一位。

要获得有效的交叉算子,关键的事情是考虑父代中哪些属性使它们变得优秀,并尝试准确地提取和组合这些属性。尼克·雷德克利夫称这种“尊重的重组” http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.5083(请注意,这篇论文相当古老,现在对理论的理解有点不同,但原理是合理的)。采用 TSP 设计的算子并将其应用于您的问题,最终会产生试图保存来自父母的不相关信息的后代。

理想情况下,您需要一个尝试保存的操作员absolute字符串中的位置。我所知道的最好的即兴产品被称为“Cycle Crossover”(CX)。我脑子里缺少一个很好的参考,但我可以给你指出我在研究生工作中实现了一些代码 https://github.com/deong/sls/blob/master/src/crossover.cpp。 CX 的基本思想描述起来相当复杂,但在实践中更容易理解。采取以下两点:

abcdefgh
cfhgedba
  1. 在父级 1 中随机选择一个起点。为简单起见,我将从位置 0 的“a”开始。

  2. 现在直接下降到父级 2,并观察那里的值(在本例中为“c”)。

  3. 现在在父级 1 中搜索“c”。我们在位置 2 处找到它。

  4. 现在再次垂直下降,观察父项 2 中位置 2 的“h”。

  5. 再次在父级 1 中搜索这个“h”,在位置 7 处找到。

  6. 直接下降并观察父级 2 中的“a”。

  7. 此时请注意,如果我们在父级中搜索“a”,我们将到达我们已经到达的位置。继续过去就会循环。事实上,我们将访问的位置序列 (0, 2, 7) 称为“循环”。请注意,我们可以简单地在父母作为一个组之间交换这些位置上的值,并且两个父母都将保留排列属性,因为我们在两个父母的循环中的每个位置上都有相同的三个值,只是顺序不同。

  8. 交换循环中包含的位置。

请注意,这只是一个周期。然后,每次从新的(未访问过的)位置开始重复此过程,直到所有位置都包含在一个循环中。在上述步骤中描述的一次迭代之后,您将获得以下字符串(其中“X”表示循环中在父级之间交换值的位置)。

cbhdefga
afcgedbh
X X    X

只要继续寻找和交换循环,直到完成。

我从 github 帐户链接的代码将与我自己的元启发式框架紧密绑定,但我认为从代码中提取基本算法并使其适应您自己的系统是一项相当简单的任务。

请注意,通过针对您的特定领域进行更定制的操作,您可能会获得很多收益。我认为像 CX 这样的东西会比基于 TSP 算子的东西产生更好的黑盒算法,但黑盒通常是最后的手段。其他人的建议可能会引导您获得更好的整体算法。

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

用遗传算法建立排名, 的相关文章

  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练
  • 调试VS 2005提示“操作不支持”

    我一直在调试 VS 2005 并将 启动外部程序 设置为 C Program Files Microsoft Visual Studio 10 0 Common7 IDE devenv exe 但按 F5 后出现此错误 尝试运行项目时出错
  • 如何让JComboBox中的内容居中显示?

    目前我有这个JComboBox 我怎样才能将其中的内容居中 String strs new String 15158133110 15158133124 15158133458 JComboBox com new JComboBox str
  • Android Jasper 报告

    Jasper Reporting 可以集成到 Android 应用程序中吗 我正在尝试从 jrxml 文件生成 PDF CSV 文本和 XLS 报告 但是 我没有看到 Android SDK 支持 net sf jasperreports
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这
  • 如何为不同操作系统/Python 版本编译 Python C/C++ 扩展?

    我注意到一些成熟的Python库已经为大多数架构 Win32 Win amd64 MacOS 和Python版本提供了预编译版本 针对不同环境交叉编译扩展的标准方法是什么 葡萄酒 虚拟机 众包 我们使用虚拟机和Hudson http hud
  • 在 VS2008 的 XAML 编辑器中禁用 Intellisense?

    有没有办法在 Visual Studio 2008 的 XAML 编辑器中禁用 Intellisense 打字时通常会消耗很大的性能 有时我会等待十秒或更长时间 直到列表自动弹出 似乎在 选项 gt 文本编辑器 gt XAML 中 Inte
  • 查询联系人 - 有时返回空游标

    我正在尝试查询联系人的显示名称 Override public void onActivityResult int requestCode int resultCode Intent data switch requestCode case
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new
  • RichFaces 应用程序,我应该使用 rich:dataTable 还是 jQGrid,优缺点吗?

    继从here https stackoverflow com questions 3899649 ok to wrap jsf components generated html with own divs using jquery aft
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 在门户中查看 Azure WebJob 计划?

    我创建了一个简单的 Azure WebJob 并通过 Visual Studio 集成制定了每天运行一次的计划 我已经部署了 WebJob 并看到它列在我在 Azure 上的应用程序中 schema http schemastore org
  • 以 Rails 形式处理 MongoMapper EmbeddedDocument

    首先 我对一般编程和 Rails 都是新手 我选择 Rails 是因为它看起来是一种很容易上手的语言 对于我的项目 我将 MongoMapper 与 Rails 结合使用 我正在尝试以与文档相同的形式处理嵌入文档 我有以下模型 class
  • CLion - 命令行程序参数

    当我分配给 运行 调试配置 程序参数 之类的 aaa bbb 然后打印它时 任何人都可以告诉我 JetBrains CLion 有什么问题吗 printf s n argv 1 我刚刚得到 aaa 而它必须是 aaa bbb 因为它们用双引
  • 无法将 /root/.rnd 加载到 RNG 中

    我想使用 Windows Open SSL 生成服务器证书 当我运行此命令行时 出现此错误 我应该怎么办 Command openssl req new x509 days 3650 key ca key out ca crt Error
  • jQuery:动态添加 DOM 元素时尝试将函数挂钩到 onclick,但它立即执行该函数

    我正在使用 jQuery 动态 我的意思是在运行时 向页面的 DOM 添加一个 span 元素 create add task button document createElement span attr id activityNameH
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?

    如何用简单的英语解释回调 它们与从另一个函数调用一个函数并从调用函数中获取一些上下文有何不同 如何向新手程序员解释它们的威力 我会尽量让这个问题变得简单 回调 是由另一个函数调用的任何函数 该另一个函数将第一个函数作为参数 很多时候 回调
  • Emberjs - 临时禁用属性更改通知

    是否有任何简单的方法可以实现临时禁用一个或多个对象属性的通知 我知道你可以推迟他们beginPropertyChanges and endPropertyChanges 但在我明确启用这些更改之前 我根本不希望收到这些更改的通知 先感谢您
  • 如何按自定义字段日期排序 WordPress 帖子?

    我正在制作一个事件侧边栏部分 仅显示接下来的 3 个事件 我已经让自定义帖子类型和自定义字段全部正常工作 但我似乎可以弄清楚如何按事件的开始日期 这是自定义字段值 对帖子进行排序 有没有一个php函数可以比较日期并将它们组织成一定的顺序 我
  • MeteorJS MongoDB 部署错误

    由于某种原因 当我使用 Meteor 部署时 我的服务器出现以下错误 并且我无法访问这些页面 我遇到以下错误 警告错误 没有可用于查询的副本集主副本 读取首选项主要 我正在使用 Meteor 1 1 0 2 并运行meteor deploy
  • RGB 字节与 HSL 之间的转换?

    有没有RGB转换的算法byte数组到 HSLfloat阵列并再次返回 我已经尝试过找到的那个here https stackoverflow com questions 8838264但它似乎有错误 我使用以下类从 HSL 转换为 RGB
  • 可视化嵌套的 JSON 结构

    考虑这个 JSON 对象 department 1 id 1 name Joe Smith email email protected cdn cgi l email protection id 500 name Bun Sam email
  • 从 using 块内的异常中检测 Dispose()

    我的应用程序中有以下代码 using var database new Database var poll Some database query code foreach Question question in poll Questio
  • 将 Javascript 函数作为参数传递给 C++ 函数

    我用 C 声明我的对象 class Action public QObject Q OBJECT Q PROPERTY QString name READ name public Action QObject 0 QString name
  • Libc共享库如何加载到内存中并在进程之间共享?

    我想了解Libc共享库如何加载到内存中并在进程之间共享 是否有一个 libc 实例加载到内存中并在所有进程之间共享 或者是每个进程的内存中的每个 libc 实例 我不清楚 libc 如何在进程之间共享 谢谢 阿迪亚 libc 的一个实例在所
  • 假镜子。你能帮我解决吗?

    这里是 BFG 9000 每次射击都会摧毁三个相邻的阳台 第 N 个阳台毗邻 第一个 射击后 生存怪物对列昂尼德造成伤害 小说的主要英雄 每个怪物一个单位 进一步后续新拍摄等 直到所有怪物 将会灭亡 需要定义最小损坏量 这可以带走列昂尼德
  • 在 Unity App.Config 文件中包含通用类

    我有一类类型ISimpleCache
  • 从已部署的 Azure 应用服务中提取 MachineKey

    我有一个 ASP NET 4 6 Web API 服务作为 Azure 应用服务在单个区域的单个应用服务计划中运行 我们正在修改此服务 使其部署在多个区域 并在前面有一个负载均衡器 每个区域都有自己的应用服务计划 因此 我们需要确保在每个应
  • API 或代码:Hibernate 3 和 4 之间的区别?

    我已经粘贴了休眠3配置文件 SessionFactory 类来配置此 config xml 和带有 JPA 注释的 bean 我想知道我是否在使用休眠4那么代码级别的上下文会发生什么变化 或者外行语言的非常广泛的差异或进步 休眠配置文件
  • Matlab:将全局坐标转换为图形坐标

    如果我通过获取坐标 coords get 0 PointerLocation 我怎样才能将它们转换为通过获得的积分ginput 即我想从中获得相同的值 coords get 0 PointerLocation coords someConv
  • 使用 declarative_base 派生对象的 alembic create_table

    我有一个 Alchemy ORM 对象 from sqlalchemy ext declarative import declarative base Base declarative base class MyORM Base id Co
  • Morningstar 用 python 请求获取 10 年的财务数据

    看来晨星登录解决方案在不使用selenium等无头浏览器 如何登录morningstar com https stackoverflow com questions 48228739 how can i log in to mornings
  • R 中依赖非标准评估的函数的包装器

    我写了一个包装ftable因为我需要计算许多变量的频率和百分比的平面表 mytable lt function tab lt ftable exclude NULL prop lt prop table x tab margin 2 100
  • 为什么composite-id类必须实现Serialized?

    如果我创建一个复合 id 类 它不实现 Serialized 如下所示 Entity Table name board public class Board Id Column name keyword news id private in
  • 在 Protractor 测试中访问 Angular

    是否可以像在单元测试中一样在量角器测试中访问角度 用例是我有一个转换文本的服务 我想访问该服务以转换实际测试脚本中的一些数据 我知道有addMockModule量角器中的方法 但我不知道如何将它用于此目的 将不胜感激任何帮助 有一个函数叫做
  • 用遗传算法建立排名,

    BIG 版本后的问题 我需要使用遗传算法建立排名 我有这样的数据 P a gt b 0 9 P b gt c 0 7 P c gt d 0 8 P b gt d 0 3 现在 让我们解释一下a b c d作为足球队的名称 以及P x gt