我需要实现为我的问题(大学项目)定制的遗传算法,并且第一个版本将其编码为短的矩阵(每个染色体的比特x人口大小).
这是一个糟糕的设计,因为我宣布一个简短但仅使用"0"和"1"值...但它只是一个原型,它按预期工作,现在是时候开发一个新的, 改良版.性能在这里很重要,但也很简单.
我研究过并提出:
对于染色体: - 字符串类(如"0100100010") - 布尔数组 - 向量(向量似乎针对布尔进行了优化) - Bitset(听起来最自然)
并为人口: - C数组[] - 矢量 - 队列
我倾向于选择矢量为chromossome和阵列为pop,但我想有任何有这个主题经验的人的意见.
提前致谢!
c++ artificial-intelligence genetic-algorithm data-structures
我有一个数字列表,形成一个系列.我想找到可以重新生成同一系列的等式.这可能吗?另外,您建议对它进行编程(GA,GP等).请举个例子.
了解md5如何工作,是否可以使用基于群体的算法(如遗传编程)来破解简单的密码?
例如,给定一个介于5到10个字符之间的字符串的md5哈希,我们将尝试返回字符串.
如果是,那可能是什么
这是为了理解遗传算法的应用,并了解是否有人做过这类事情.
继续使用代码获取错误,这是从旧版VS到2010版的转换:
#include <string>
#include <stdlib.h>
#include <iostream>
#include <time.h>
#include <math.h>
using std::string;
#define CROSSOVER_RATE 0.7
#define MUTATION_RATE 0.001
#define POP_SIZE 100 //must be an even number
#define CHROMO_LENGTH 300
#define GENE_LENGTH 4
#define MAX_ALLOWABLE_GENERATIONS 400
//returns a float between 0 & 1
#define RANDOM_NUM ((float)rand()/(RAND_MAX+1))
//----------------------------------------------------------------------------------------
//
// define a data structure which will define a chromosome
//
//----------------------------------------------------------------------------------------
struct chromo_typ
{
//the binary bit string is held in a std::string
string bits;
float fitness;
chromo_typ(): bits(""), fitness(0.0f){};
chromo_typ(string …Run Code Online (Sandbox Code Playgroud) 对于我的学士论文,我想写一个学习玩Stratego游戏的遗传算法(如果你不知道这个游戏,假设我说国际象棋可能是安全的).我以前从未做过实际的人工智能项目,所以看到我实际上对实现的了解有点少,这让人大开眼界.
我坚持的事情是为实际策略提供一个很好的代表.我可能会犯一些思考错误,但遇到的一些问题:
我认为经过三年多的学习后我应该知道这些事情,所以我觉得很愚蠢 - 这看起来像我根本没有任何线索.仍然,任何关于谷歌的帮助或提示将不胜感激!
artificial-intelligence data-representation genetic-algorithm
我们知道遗传算法(或进化计算)与我们的解空间Ω中的点的编码一起工作,而不是直接对这些点进行编码.在文献中,我们经常发现GAs具有以下缺点:(1)由于许多染色体被编码成相似的Ω点或相似的染色体具有非常不同的点,因此效率相当低.你认为这真的是一个缺点吗?因为这些算法在每次迭代中使用变异算子来使候选解决方案多样化.为了增加更多的多样性,我们只需增加交叉的概率.我们不能忘记,我们的初始种群(染色体)是随机产生的(另一种更多样化).问题是,如果你认为(1)是GA的缺点,你能提供更多细节吗?谢谢.
algorithm heuristics genetic-algorithm evolutionary-algorithm
我想知道是否有人知道图中路径的任何直观的交叉和变异算子?谢谢!
我正在尝试创建一个由0和1组成的随机二进制字符串.在我的实现中,我生成随机整数0和1,然后我使用std :: to_string()以将它们转换为字符串并将它们插入另一个字符串.我遇到的问题是,似乎通过使用std :: to_string()来插入'0'或'1'字符,我还插入了终止空字符'\n',因此我加倍了串.例如,假设我要创建一个由Nbits = 10个字符组成的字符串.通过下面的实现,我得到一个10元素字符串,如屏幕上打印,但字符串的大小是其两倍.你知道我怎么能避免这个吗?
大小的问题在于我正在尝试编写遗传算法的二进制表示,并且我需要大小是交叉/变异操作符正确的大小.
#include <iostream>
#include <string>
#include <random>
using namespace std;
std::random_device rd;
std::mt19937 gen(rd());
// Random bit string generator
string random_string(size_t Nbits){
std::uniform_int_distribution<> int1(0,1);
string s;
s.resize(Nbits);
for(size_t i=0; i<Nbits; i++)
s.insert(i,to_string(int1(gen)));
return s;
};
int main(){
// Say I want a 10 bits random binary string
size_t Nbits=10;
string s=random_string(Nbits);
// If I print my string on screen, it has the correct number of entries:
cout<<s<<endl;
// However the size of the …Run Code Online (Sandbox Code Playgroud) 我一直在认真地尝试创建一个基因程序,它将以可接受的方式发展为井字游戏.我正在使用基因组生成一个函数,然后将板作为输入并输出结果......但它不起作用.
这个程序可以用少于500行代码(包括空行和文档)编写吗?也许我的问题是我正在生成过于简单的AI.
请给我一些帮助和洞察这个适用于这个特定简单问题的"遗传编程"概念.
@OnABauer:我认为我使用遗传编程是因为引用了维基百科
在人工智能中,遗传编程(GP)是一种基于进化算法的方法,其灵感来自生物进化,以发现执行用户定义任务的计算机程序.
我正在尝试生成一个程序(在这种情况下是函数),它将执行玩tic-tac-toe的任务,你可以看到它,因为最重要的输出 genetic_process函数是一个基因组,然后将转换为一个函数因此,如果我理解正确,这是遗传编程,因为输出是一个函数.
代码运行时没有错误也没有崩溃.问题是,最终我得到的是一个无能的人工智能,它将试图非法行动并因每次失败而受到惩罚.它并不比随机更好.
可能是因为我的AI功能如此简单:只需对没有条件的正方形的存储值进行计算.
我的cromosome显示了一系列函数,这些函数将用于减少存储为trinary的电路板数组.好吧,让我举一个例子:*染色体是:amMMMdsa(染色体长度必须为8).1.第一步是将此转换为函数,在顶部查找后调用LETTERS_TO_FUNCTIONS,这给出了函数:[op.add,op.mul,op.mod,op.mod,op.mod,op.floordiv,op.sub,op.add]
第二步是将董事会转变为三元代表.所以,让我们说董事会是"OX XOX "我们将获得[2,3,1,1,3,2,3,1,1]
第三步是使用上面获得的函数减少三次演化.下面的功能最好地解释了这一点:
def reduce_by_all_functions(numbers_list,functions_list):
"""
Applies all the functions in a list to a list of numbers.
>>> reduce_by_all_functions([3,4,6],[op.add,op.sub])
1
>>> reduce_by_all_functions([6,2,4],[op.mul,op.floordiv])
3
"""
if len(functions_list) != len(numbers_list) - 1:
raise ValueError("The functions must be exactly one less than the numbers")
result = numbers_list[0]
for …Run Code Online (Sandbox Code Playgroud)在进化计算的背景下,什么是"健身共享"和"利基计数"?
artificial-intelligence terminology definition genetic-algorithm evolutionary-algorithm
algorithm ×3
c++ ×3
definition ×1
genetic ×1
heuristics ×1
math ×1
md5 ×1
mutation ×1
path ×1
python ×1
series ×1
string ×1
terminology ×1