我正在研究roguelike并使用GA来生成关卡.我的问题是,每一代GA都应该有多少级别?而且,它应该有多少代?最好是每代人都有几个级别,有很多代,或者反过来?
我需要从一组数据中概率性地选择一个样本。
假设我有一组值array[12, 15, 29, 17, 12, 29]。标准方法是计算总数 (12 + 15 + 29 + 17 + 12 + 29),然后创建一个有利于更高值的微调器。有点像饼图,我们从样本集中随机选择,但偏爱具有最高值的个人。
例如,数字高于您随机选择array[0]的机会是 11%,而机会array[5]是 25%。没关系
不过,我想要做的是偏向于较低的数字,并且以我所有的头脑风暴能力,我无法想出一种方法,使较低的数字具有统计上相等的选择概率,就好像我们要选择较大的数字一样。
我解决这个问题的一种方法是添加array[]然后从总数中减去每个值,array2[102, 99, 85, 102, 85]然后重新计算来自array2[].给出array[0]21%的百分比。此解决方案的问题在于,具有接近统计选择概率的元素array[1]具有远距离选择百分比。
我们还尝试将最低和最高然后下一个最低与下一个最高百分比值交换,但这会给您带来与我们第一次尝试相同的问题。
我觉得必须有一个简单的方法来做到这一点。
注意:如果您熟悉进化/遗传计算,我们将尝试根据适应度比例进行亲本选择。然而,我们的适应度值是相反的(越低越好)。那么,如果适应度越低越好,我们如何为父母进行适应度比例选择呢?
我有一个程序,它与遗传算法一起工作,并生成一个8位二进制字符串(染色体由8个基因组成).
我想知道如何改变/翻转第一个基因/位.
例如:
Original chromosome:
01010101
Changed chromosome:
11010101 //First bit has been changed
Run Code Online (Sandbox Code Playgroud)
如果第一位的值为1,我想'翻转'使其成为a 0; 并且,显然,如果数组/染色体中的第一位是a 0,我想将其"翻转"为a 1.
谢谢.
任何人都可以给出交叉概率的例子吗?我想知道确定交叉概率有什么好处,以及它在遗传算法或遗传编程中有什么影响.
genetic-programming genetic-algorithm evolutionary-algorithm
我有一个遗传算法,目前正在使用轮盘赌选择来生成新的种群,我想将其更改为随机通用采样。
我对这里的工作方式有一个粗略的概述:
pointerDistance = sumFitness/popSize
start = rand.uniform(0, pointerDistance)
for i in xrange(popSize):
pointers.append(start + i*pointerDistance)
cumulativeFit = 0
newIndiv = 0
for p in pointers:
while cumulativeFit <= p:
cumulativeFit += pop[newIndiv].fitness
newPop[newIndiv] = copy.deepcopy(pop[newIndiv])
newIndiv += 1
Run Code Online (Sandbox Code Playgroud)
但我正在努力解决如何准确地实现随机通用采样。有谁知道一些伪代码或示例的好来源?
用一个例子简要描述什么是随机通用采样(但我不确定它是否有意义?):
我为遗传算法中的锦标赛选择做了这个程序:
从人口中选择k个随机个体,并从这些k个体中选择两个最佳个体作为父母.
这是对的吗?
我已经为遗传算法编写了这个代码,通过获得基因的随机int(质量,高度(指标)和腿力)计算跳跃高度,然后用其他表现最好的随机标本再现自身.存储在一个名为的2d数组中geneBoard.现在我的问题; 你认为写1000次相同的值是不切实际的,所以我试着用这个:
float[,] geneBoard = Enumerable.Repeat(
mass = GetMass(500, 1000),
height = GetHeight(150, 190),
force = GetForce(500, 3500),
fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)), 1000)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
而不是这个:
float[,] geneBoard = new float[4, 4]
{
{ mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
{ mass = GetMass(500, 1000), height = GetHeight(150, 190), force = GetForce(500, 3500), fitnessScore = Convert.ToSingle(PhysicalTest(mass, height, force)) },
{ mass = GetMass(500, 1000), height = …Run Code Online (Sandbox Code Playgroud) 我是 C++ 的新手,我正在尝试创建一个基本的遗传算法。我创建了一个 Chromosome 类,并想创建一个 Society 类,该类生成这些染色体的向量,其中包含随机生成的“基因”。基因是染色体中的向量,其值为 0 或 1。我正在测试染色体构造函数,所有对象都具有相同的基因向量。如何让构造函数生成随机值?我在下面包含了代码。任何其他编码实践或优化技巧也将不胜感激。
源文件
#include "Chromosome.h"
#include "Society.h"
using namespace std;
int main()
{
Chromosome demo = Chromosome::Chromosome();
Chromosome demo2 = Chromosome::Chromosome();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
染色体.h
#pragma once
#include <vector>
using namespace std;
class Chromosome
{
private:
int fitness;
vector<int> genes;
public:
Chromosome();
void generateGenes();
int calculateFitness(),
getFitness();
vector<int> getGenes();
void setGenes(vector<int> child);
};
Run Code Online (Sandbox Code Playgroud)
染色体.cpp
#include "Chromosome.h"
#include <cstdlib>
#include <ctime>
#include <numeric>
using namespace std;
Chromosome::Chromosome()
{
generateGenes();
Chromosome::fitness = calculateFitness();
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试为旅行商问题(TSP)编写遗传算法.如需选择我正在实施轮盘赌选择:http://www.edc.ncl.ac.uk/highlight/rhjanuary2007g02.php/
它基本上意味着被选择用于交配的概率与适应度函数的值成比例.
TSP最常见的适应性功能是路线的长度.然而,路线越"越短"越好.
如何编写描述路线短缺的适应度函数?
或者我如何将每条路线的真实长度转换为概率?
下面是我的代码,但该if声明不起作用.
int i = 0;
while (true) {
long l = fibonacci(i++);
if (l < 0L && l > Long.MAX_VALUE) {
System.out.println("over");
break;
}
Run Code Online (Sandbox Code Playgroud)
}
我怎么知道long价值是否达到了Long.MAX_VALUE?
java ×2
algorithm ×1
android ×1
c# ×1
c++ ×1
linq ×1
oop ×1
probability ×1
python ×1
stochastic ×1