我正在做一个遗传算法项目,我们需要构建一个软件,根据它们的历史选择一组股票。我们需要在遗传编程上做这件事,这意味着我们需要一个适应度函数和一个染色体。是的,我通过股票的平均历史与其实际价值之间的正差异来考虑适应度函数。(因此,如果匹配,它将为 0 )。有人知道如何表达染色体吗?
1 回答
这个问题似乎没有很好的定义。如果您知道股票的实际价值,您提到的适应度函数将为您提供价格在其实际价值附近徘徊的股票的选择。其他可能性:
第一种情况:您试图根据其历史表现选择一组最有前途的股票,即最大化预期收益和/或最小化方差/风险。如果可供选择的股票数量不多,最简单的选择是使用二进制字符串:0 表示没有选择,1 表示选择。该位置对应于股票的指数。如果您有大量可能的股票可供选择,您可以将股票的标签/索引编码为您的染色体。如果您对要选择的股票数量没有最大上限,这可能意味着可变长度的染色体,并且编码会更加困难。
适应度函数(要最大化)将是所选股票的(预期收益 - 标准差)之和。预期回报可以通过两种方式制定:预期未来价格 - 当前价格,或当前价格 - 基础价值(如果你知道基础价值,那就是)。可以根据历史数据估计预期的未来价格(例如,拟合您选择的简单曲线,或应用 ARIMA 并扩展到下一个时间点)。标准偏差可以直接从历史数据中估算出来。
如果您的染色体是二进制的(值为 0/1),一旦您获得预期回报和标准偏差,一个简单的点积就可以完成所需的计算。我想可能对所选股票的数量也有限制,在这种情况下,您有一个受约束的优化问题。您可以将约束表示为适应度中的惩罚。
该问题本质上是一个二进制整数线性程序 (BILP),您可以将 GA 与其他 bilp 求解器进行基准测试。使用一个不错的混合整数线性规划求解器(例如 symphony、gurobi、ibm cplex 等),您通常可以比使用 GA 更快地解决大问题。
第二种情况:您试图找出以当前价格购买多少股票以最大化预期收益。除非您想表示短路,否则您的染色体将是非负整数。适应度仍与第 (1) 项相同,即选定股票的价格总和,随时间的平均值减去选定股票随时间的历史价格的标准差。该问题变为整数线性规划问题。其他一切与第 (1) 项相同。同样,如果您可以选择的股票数量很大,您会发现 MILP 求解器会比 GA 更好地为您服务。
此外,GP(遗传编程)与 GA 有很大不同。如果您正在尝试发展一种选股策略,或者一种预测未来股价的表达式,那么您实际上就是一个 GP。对于选股问题,a ga wld b 就足够了。