hashbangcode/webolution

Webolution,一个进化引擎。

2.0.7 2022-01-26 21:15 UTC

This package is auto-updated.

Last update: 2024-09-27 03:08:01 UTC


README

一组实验性的类,旨在构建一个将网页进化的应用程序。这是一个测试应用程序,让我学习遗传算法涉及的技术以及如何使用composer构建现代PHP应用程序。因此,事物可能会在不经意间发生显著变化。

我对了解是否有人看过这段代码或对改进有建议感兴趣。请通过问题队列联系我,并告诉我。

需求

  • PHP(最好7.2+)。
  • Composer。

结构

该应用程序被构建为不同类型的对象,以确保关注点的分离。

类型

类型类负责进化过程核心的数据类型。在核心中,一个类型类只关心它包含的数据。类型类没有执行突变或计算适应度度量的功能,这是个体类的领域。

个体

个体类为类型类提供突变和适应度功能。它们不是扩展类型,而是将它们作为参数包装起来。个体类可以被视为类型类的装饰器。每个类型类映射到一个个体类。

种群

种群类提供了一个个体集合。

进化

进化类用于控制进化过程。这连接了种群个体类型类,并控制每代种群对象。已创建了一个进化存储类,以允许一次使用数据库作为存储引擎进化更多的个体

类型详情

以下详细说明了每个类型及其与其他类型的任何交互。

数字

定义了一个包含数字的类。NumberType类可以向此数字添加或减去。它被创建为一个非常简单的初始类型,以便测试进化过程的功能。

文本

定义了一个包含字符串的类。该类具有获取或设置字符串的函数。

颜色

定义了一个包含关于颜色的信息的类。这是通过颜色的RGB值内部存储的。

图像

这定义了一个二维数组,该数组渲染为图像。该数组由“开启”或“关闭”值组成,然后用于在图像中创建网格框。

元素

这代表了一个HTML元素。核心属性是元素类型(div、p、strong等)和一个或多个属性。属性可用于给元素添加类或id,尽管任何属性都是允许的。一个元素对象还可以包含一个或多个子元素对象,从而创建元素的层次结构。

单位

单位是一个包含CSS中测量信息的对象。这由一个数字和一个测量单位表示。因此,可以存在像10px、10em、10%这样的值。特殊值“auto”也可以表示。

样式

这定义了一个包含关于单个元素针对CSS规则集的信息的对象。该类包含一个选择器属性和一个属性属性,它们结合在一起形成一个CSS块。

页面

页面将样式元素类组合成一个页面结构。使用页面类可以使页面的基本HTML结构保持静态,而页面内的元素和样式可以改变。

进化过程

以下描述了每一代的进化过程。

淘汰

要开始进化过程,需要淘汰一定数量的种群。个体被淘汰的概率取决于个体的适应性。适应性高的个体不太可能被淘汰。

复制

然后将种群中的现有个体复制,使种群数量恢复到指定的最小值。这意味着当前种群将包含适应性最强的个体。

变异

随后对种群进行随机变异。种群如何变异取决于所使用的对象类型。种群经过变异周期后,可以进入交叉周期。这是个体混合在一起,并交换其属性的过程。

生成统计数据

然后计算种群的相关统计数据。

存储

此操作将种群克隆到数组中,以便以后检索。这在查看种群历史时非常重要。

下一步

需要发生的一些事情。

  • 查看性能。创建大量对象可能会消耗大量内存,也许可以考虑只存储种群中排名前(或后)的个体,而不是所有个体。
  • TextIndividual计算其适应性的方式基于外部因素。因此,最好将此功能抽象出来,以便不仅仅是这个类具有此功能。

未来计划

  • 添加依赖注入容器,以简化在其他应用程序中使用应用程序的方式。
  • 生成个体的家谱。
  • 性能测试和改进。