我决定使用神经网络来创建我拥有的动画引擎的行为.神经网络为我拥有的每个身体部位提供3个vector3s和1个欧拉角.第一个vector3是位置,第二个是它的速度,第三个是它的角速度.欧拉角是身体部位的旋转.我有7个身体部位.这些数据类型中的每一个都有3个浮点数.7*4*3 = 84,所以我的神经网络有84个输入.输出映射到角色的肌肉.它们提供适用于每块肌肉的力量,其中有15种.
我同时运行15个网络10秒,通过计算最低能量使用,具有最小量的z和x运动,以及如果身体部位处于与其余部分相比正确的y位置来评定其适合度(hips.y> upperleg.y,upperleg.y> lowerleg.y等),然后通过遗传算法运行它们.我正在运行一个神经网络,每个隐藏层有168个神经元,有8个隐藏层.我试图让角色站直,不要走动太多.我跑了3000代,我甚至没有接近.
神经网络和遗传算法是本教程的 C#版本.我将交叉方法从一个点改为混合.
我有84个输入和15个输出.我的神经网络应该有多大?
animation physics machine-learning neural-network genetic-algorithm
我最近开始使用pyBrain进行一些机器学习研究.我对GA以及人工神经网络感兴趣 - 但是对pyBrain主页列出GA作为库的特征之一的事实感到沮丧,在GA编程的pyBrain文档中似乎没有任何内容(例如染色体选择,适应度函数)等),PyBrain网站(AFAIK)上没有涉及GA的例子.
同样令人惊讶的是,我使用PyBrain查找GA示例的所有搜索也没有产生任何结果.有没有人有一个代码链接,显示使用pyBrain的GA示例?
python artificial-intelligence machine-learning genetic-algorithm pybrain
我问这个问题,因为我知道这里有很多读得很好的CS类型可以给出一个明确的答案.
我想知道是否存在(或正在研究/开发)这样的AI,它通过生成和编译代码来编写程序,然后通过从以前的迭代中学习来进行.我正在谈论努力使我们,程序员,过时.我正在想象通过反复试验来学习编程语言中哪些有效和哪些无效的东西.
我知道这听起来像是在天空中,所以我要求找出已做过的事情,如果有的话.
当然,即使是人类程序员也需要输入和规范,因此这样的实验必须具有精心定义的参数.就像AI要探索不同的计时功能一样,必须明确定义这个方面.
但是,通过复杂的学习AI,我很想知道它可能会产生什么.
我知道计算机有很多人的品质无法像我们的判断,品味和偏见那样复制.但是我的想象力喜欢一个程序的想法,这个程序在经过一天的思考后会吐出一个网站,让我看看它是什么产生的,甚至我常常认为它是垃圾; 但也许每天一次我可能会给它反馈并帮助它学习.
这个想法的另一个途径是提供像"菜单网站"或"图像工具"这样的高级描述会很好,它会产生足够深度的代码,这对于我来说代码完成模块是很有用的.细节.但我想这可以设想为非智能静态分层代码完成方案.
这个怎么样?
computer-science artificial-intelligence machine-learning genetic-algorithm
最近一篇文章讨论了使用遗传算法来优化星际争霸II中的"构建顺序".
http://lbrandy.com/blog/2010/11/using-genetic-algorithms-to-find-starcraft-2-build-orders/
星际争霸的初始状态是预先确定的并且是不变的.和国际象棋一样,在比赛的早期阶段做出的决定对于球员在比赛中后期的表现能力具有长期影响.因此,各种开放可能性或"构建订单"正在经过深入的研究和审查.在上述文章的发行之前,计算机辅助的构建顺序创建可能并不像最近那样流行.
我的问题是...... 遗传算法真的是建模优化构建订单的最佳方法吗?
构建顺序是一系列操作.某些操作具有先决条件,例如"在创建构建C之前需要构建B,但您可以随时构建A".所以染色体可能看起来像AABAC.
我想知道遗传算法是否真的是解决这个问题的最佳方法.虽然我对这个领域并不太熟悉,但我很难将基因概念变成数据结构,这是一系列行动.这些不是独立的选择,可以像头和脚一样混合和匹配.那么复制和穿越这样的东西有什么价值呢?
我想任何国际象棋AI都会更合适,因为在任何给定时间的选择数组都可以在某种程度上被视为树状.
对于遗传算法,通常基因符号如下:
PARENT1: 101101010101001001001001110011100110101011101101
PARENT2: 010100111011010101110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
如此交叉,突变可以通过这种表示来完成,如:
选择一个交叉点:
PARENT1: 1011010101010010 01001001110011100110101011101101
PARENT2: 0101001110110101 01110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
执行交叉生成孩子:
CHILD: 1011010101010010 01110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
然后变成一条全新的染色体:
CHILD: 101101010101001001110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在Java中表示每周计划基因?
示例来自本文:http://secretgeek.net/content/bambrilg.pdf
我正在克服Java中的这个时间表问题,并希望代表
FIGURE 10: An Entire University Timetable
Run Code Online (Sandbox Code Playgroud)
在Java中.
我正在写一个遗传算法来生成字符串"helloworld".但是当n为10,000或更多时,evolve函数会创建堆栈溢出.
module Genetics where
import Data.List (sortBy)
import Random (randomRIO)
import Control.Monad (foldM)
class Gene g where
-- How ideal is the gene from 0.0 to 1.0?
fitness :: g -> Float
-- How does a gene mutate?
mutate :: g -> IO g
-- How many species will be explored?
species :: [g] -> Int
orderFitness :: (Gene g) => [g] -> [g]
orderFitness = reverse . sortBy (\a b -> compare (fitness a) (fitness b))
compete :: (Gene …Run Code Online (Sandbox Code Playgroud) 我必须使用遗传算法来解决旅行推销员问题,我将不得不为家庭作业写作.
问题包括52个城市.因此,搜索空间是52!.我需要随机抽样(比方说)1000个range(1, 53)遗传算法初始种群的个体排列.
为了做到这一点,我试过:
>>> random.sample(itertools.permutations(range(1, 53)), 1000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/random.py", line 314, in sample
n = len(population)
TypeError: object of type 'itertools.permutations' has no len()
Run Code Online (Sandbox Code Playgroud)
所以我试过了
>>> random.sample(list(itertools.permutations(range(1, 53))), 1000)
Run Code Online (Sandbox Code Playgroud)
但是,鉴于它52!非常大,list操作最大化了我的计算机上的内存和交换空间.我不能只选择产生的前1000个排列itertools.permutations因为它是非常确定的并且会偏向我的遗传算法.
有没有更好的方法来实现这种抽样?
我实施了一种遗传算法来解决增强的旅行商问题(边缘的权重随着时间的推移而变化).目前我正在评估我的模拟的不同参数,我偶然发现了一个我无法向自己解释的相关性:
突变率越高,运行时间越短.就个人而言,我会假设相反,因为更高的突变率会产生更多的操作.(25%的突变率比5%快12%)
突变率为8%(5%优于10%,25%表现最差(0%除外)),效果最佳.适应值越低越好.
迭代计数由生成参数设置,在所有测试用例中设置为10.000.
每个测试用例执行10次.
我在变异中的实现(在python中)看起来像这样:
def mutate(self,p):
for i in self.inhabitants:
r = random()
if r <= p:
i.mutate()
Run Code Online (Sandbox Code Playgroud)
p 是突变率
突变看起来像这样
def mutate(self):
r1 = randint(0,self.locations.size()-1)
r2 = randint(0,self.locations.size()-1)
self.locations.swap(r1,r2)
Run Code Online (Sandbox Code Playgroud)
为什么更高的突变率会导致更快的执行时间?
编辑:我实际上在我的Raspberry Pi上运行了相同的测试(速度慢了9倍),结果相同:
python genetic-programming traveling-salesman genetic-algorithm
我对比赛选择的理解是:
对于给定的锦标赛大小,t,从群体中随机选择t个体并将该锦标赛的获胜者确定为具有最大适应度函数值的个体.
我的问题是:
" 二元锦标赛选择 "和" 锦标赛选择 " 之间是否存在差异,或者它们是否可以互换?
genetic-programming genetic-algorithm evolutionary-algorithm
我刚刚开始使用 DEAP。之前我用的是基于Matlab的GA,交叉变异后就是选择指定大小的较好个体,然后更新种群。但是我很难理解为什么在 DEAP 中,在交叉和变异过程之后需要评估具有无效适应度的个体:
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
ind.fitness.values = fit
Run Code Online (Sandbox Code Playgroud)
我尝试删除这些代码,但似乎算法永远不会收敛。甚至我也没有看到那些可以更新人口/后代的东西,那么它们有什么用呢。提前致谢!!!
python ×4
algorithm ×1
animation ×1
deap ×1
haskell ×1
java ×1
large-data ×1
memory ×1
optimization ×1
physics ×1
pybrain ×1
random ×1
sample-data ×1