首先:这不是关于如何让节目连续播放的问题.去过也做过.
我做了一个五行的游戏作为一个框架,试验基因改进AI(哎呀,这听起来非常自命不凡).与大多数回合制游戏一样,最佳动作是通过为每个可能的动作分配分数,然后以最高分数进行动作来决定.将分数分配给移动(正方形)的功能如下:
如果正方形已有令牌,则得分为0,因为在正方形中放置新令牌是非法的.
每个方格可以是多达20个不同获胜行的一部分(5个水平,5个垂直,10个对角线).平方的得分是这些行中每一行的得分之和.
连续得分取决于行中已有的友方和敌方令牌的数量.例子:
鉴于此算法,我已经声明了一个名为TBrain的类型:
type
TBrain = array[cFriendly..cEnemy , 0..4] of integer;
Run Code Online (Sandbox Code Playgroud)
数组中的值表示具有N个友好令牌和0个敌人令牌的行的分数,或0个友好令牌和N个敌人令牌.如果连续有5个令牌,那么因为该行已满,所以没有得分.
实际上很容易确定数组中应该包含哪些值.Brain [0,4](四个友方代币)应该是"无限",让我们称之为1.000.000.vBrain [1,4]应该非常高,但不要太高,以至于大脑更愿意阻止几个敌人胜利而不是自我胜利
以下(不可能的)董事会:
0123456789
+----------
0|1...1...12
1|.1..1..1.2
2|..1.1.1..2
3|...111...2
4|1111.1111.
5|...111....
6|..1.1.1...
7|.1..1..1..
8|1...1...1.
Run Code Online (Sandbox Code Playgroud)
玩家2应该将他的令牌放入(9,4),赢得游戏,而不是(4,4),即使他会阻止玩家1的8个潜在获胜行.Ergo,vBrain [1,4]应该是(vBrain) [0,4]/8)-1.像这样工作,我们可以找到"大脑"的最佳值,但同样,这不是我感兴趣的.我想要一个算法来找到最佳值.
我已经实现了这个框架,因此它完全是确定性的.分数中没有添加随机值,如果几个方格具有相同的分数,则会选择左上角.
这是介绍,现在到有趣的部分(对我来说,至少)
我有两个"大脑",vBrain1和vBrain2.我应该如何迭代地使这些变得更好?我想象这样的事情:
这似乎不起作用.大脑并没有变得更聪明.为什么?
分数方法是否应该为结果添加一些小的随机值,以便同一个两个大脑之间的两场比赛会有所不同?每次迭代的值应该改变多少?应该如何初始化"大脑"?有恒定的价值?随机值?
此外,这与AI或遗传算法有什么关系吗?
PS:这个问题与五连胜无关.这只是我选择的东西,因为我可以宣布一个非常简单的"大脑"进行实验.
我N有人必须参加T考试.每次考试都需要"一些"时间,例如30分钟(没有提前完成的事情).考试必须在考官面前进行.
我需要安排每个人在整个时间段内在考官面前进行每次考试,但避免午休,在最短的时间内使用最少数量的考官(即没有/最小考官闲置)
有以下限制:
我意识到最佳解决方案可能是NP-Complete,并且我可能最好使用遗传算法来获得最佳估计(类似于此?座位计划软件建议(这样的野兽甚至存在吗?)).
我对遗传算法如何工作感到满意,我正在努力解决的是如何以编程方式对问题进行建模,以便我可以通过基因操作参数.
如果每次考试花费相同的时间,那么我将时间段划分为这些长度,然后简单地创建一个时间矩阵与审查员并将候选人放入.但是因为每次测试的时间不一定是同样,我对如何处理这个问题有点失落.
目前我这样做:
我正在寻找关于如何处理这个问题的更好的建议,因为它目前感觉相当粗糙.
对于遗传算法,通常基因符号如下:
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中.
我目前正在尝试实现遗传算法的一个非常简单的例子.
有一次,你必须用两个数字(父母)做一个"交叉"(生物学)才能得到一个"孩子".
你可以在这里找到交叉的解释:
如何"交叉"两个字符串(1234&abcd - > 12cd&ab34)
(第二个例子,更容易的"一点"交叉是我正在尝试做的.)
染色体(父母和孩子)是数字,但"交叉"将是一个操作.
我找到了其中一条"染色体"的解决方案,具体如下:
>>>运算符)<<操作员)因此,这将保留一条染色体的末端,并以0开头填充开头.
但我真的不知道如何解决另一条染色体的问题,然后也做了交叉.
(一旦我保留染色体的开始/结束并用0填充其余部分,可能是异或.)
或者我应该从另一个角度处理这个问题?
我试图用遗传算法找出一个浮点数的平方根.
我初始化了随机数和健身函数.如何从人口和统一交叉中实施父母的选择?
这是我的C++代码(我使用的是Visual C++ 2010):
int absd(int t)
{
return abs(t);
}
int main()
{
try
{
int dpi = 137;
int dpiCriterionAry[] = {100, 150, 200, 300, 400, 500, 600};
std::vector<int> vec(dpiCriterionAry, dpiCriterionAry + _countof(dpiCriterionAry));
std::transform(vec.begin(), vec.end(), vec.begin(), std::bind1st(std::minus<int>(), dpi));
std::transform(vec.begin(), vec.end(), vec.begin(), absd);
//std::transform(vec.begin(), vec.end(), vec.begin(), abs);
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\t"));
cout << endl;
}
catch(exception& e)
{
cerr << e.what() << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我取消注释该行时:
//std::transform(vec.begin(), vec.end(), vec.begin(), abs);
Run Code Online (Sandbox Code Playgroud)
我收到了错误消息:
1>------ Build started: Project: Console, Configuration: Release …Run Code Online (Sandbox Code Playgroud) 几个星期前我问了一个关于如何在R中进行优化的问题(使用Optimize R优化矢量).现在我已经掌握了R中的基本优化,我想开始使用GA来解决解决方案.
鉴于目标函数:
div.ratio <- function(weight, vol, cov.mat){
weight <- weight / sum(weight)
dr <- (t(weight) %*% vol) / (sqrt(t(weight) %*% cov.mat %*% (weight)))
return(-dr)
}
Run Code Online (Sandbox Code Playgroud)
我正在使用genalg包进行优化,特别是"rbga.bin"函数.但事情是似乎无法传递多个参数,即无法传递vol和cov.mat.我错过了什么或理解错误.
编辑:在genalg包中,有一个名为rbga.bin的函数,我正在使用它.
以下是上一个问题的简单代码,可以帮助您入门:
rm(list=ls())
require(RCurl)
sit = getURLContent('https://github.com/systematicinvestor/SIT/raw/master/sit.gz', binary=TRUE, followlocation = TRUE, ssl.verifypeer = FALSE)
con = gzcon(rawConnection(sit, 'rb'))
source(con)
close(con)
load.packages('quantmod')
data <- new.env()
tickers<-spl("VTI,VGK,VWO,GLD,VNQ,TIP,TLT,AGG,LQD")
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data, auto.assign = T)
for(i in ls(data)) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)
bt.prep(data, align='remove.na', dates='1990::2013')
prices<-data$prices[,-10]
ret<-na.omit(prices/mlag(prices) - …Run Code Online (Sandbox Code Playgroud) 我目前正试图用一种不常见的方法,一种遗传算法来解决reddit上的艰难挑战#151.
总之,一个分隔条件字符串之后consonants和vowels和移除spaces我需要把它放在一起不知道什么字符是第一位的.
hello world被分隔到hllwrld与eoo和需要被重新组装起来.例如hlelworlod,一种解决方案是,但这没有多大意义.采用所有可能解决方案的详尽方法可行,但对于较长的问题集则不可行.
cost使用Zipf定律构造相对数据库,并且可以从没有空格的句子中始终分离单词(借用此问题/答案)1和2有效地编码构造gene.这个gene例子的正确性是1211212111使用该infer_spaces()方法生成500个随机序列,并使用所有单词的成本评估适应度,取最佳值25%并从中修改4个新值,适用于小字符串,但经常落入局部最小值,尤其是对于较长序列.Hello World已经在第一代中发现(已经thisisnotworkingverygood正确分离并且具有成本)已经在第二代中41.223收敛到th iss n ti wo or king v rye good(270成本).
显然,使用计算出的成本作为评估方法仅适用于语法正确的句子的分离,而不适用于此遗传算法.你有更好的想法吗?或者是解决方案的另一部分,例如问题的表示gene?
我想在R中使用GA来优化eps-regression(SVR)中的三个参数(gamma,cost和epsilon).这就是我所做的.
library(e1071)
data(Ozone, package="mlbench")
a<-na.omit(Ozone)
index<-sample(1:nrow(a), trunc(nrow(a)/3))
trainset<-a[index,]
testset<-a[-index,]
model<-svm(V4 ~ .,data=trainset, cost=0.1, gamma=0.1, epsilon=0.1, type="eps-regression", kernel="radial")
error<-model$residuals
rmse <- function(error) #root mean sqaured error
{
sqrt(mean(error^2))
}
rmse(error)
Run Code Online (Sandbox Code Playgroud)
在这里,我将cost,gamma和epsilon分别设置为0.1,但我不认为它们是最好的值.所以,我想使用遗传算法来优化这些参数.
GA <- ga(type = "real-valued", fitness = rmse,
min = c(0.1,3), max = c(0.1,3),
popSize = 50, maxiter = 100)
Run Code Online (Sandbox Code Playgroud)
在这里,我使用RMSE作为适应度函数.但我认为健身功能必须包括要优化的参数.但是,在SVR中,目标函数太复杂了,无法用R代码写出来,我试图找到它很长时间但无济于事.有人同时了解SVR和GA的人,有使用GA优化SVR参数的人,请帮帮我.请.
我为galib247(下面)添加了多线程支持,但我仍然看到解决方案陷入局部最大值的问题.
也许这是遗传算法的一个缺点.如果有人有任何建议,请告诉我.我已经尝试过运行1000个独立人群,根据最近人口找到更好的解决方案的优先次序,我仍然认为它没有找到最佳解决方案.
我也试过修改mutator.也许解决方案设置太复杂,有很多局部最大值.它通常在1000个池池中的每一个池中找到不同的局部最大值,但偶尔会有一个池池找到更好的答案并且优先用于调度.
我正在尝试做的是根据一组不断变化的历史价格,为FX交易信号发生器生成一个最佳技术分析指标列表,其中包含参数.几年前有一本关于它的书,我认为作者的名字是卡茨.
我正在测试结果与第二个历史价格集的差异,但基本上,真正的考验是它是否可以预测未来的价格.
GAPopulation.C(http://lancet.mit.edu/ga/Copyright.html):
#include <boost/thread.hpp>
#include <boost/threadpool.hpp>
boost::threadpool::pool GAPopulation::thpool(5);
void GAPopulationEvaluatorWorker(void* individual_ptr) {
((GAGenome*) individual_ptr)->evaluate();
boost::this_thread::yield();
}
void GAPopulation::DefaultEvaluator(GAPopulation& p) {
for(int i = 0; i < p.size(); i++) {
thpool.schedule(boost::bind(GAPopulationEvaluatorWorker, p.individual_ptr(i)));
}
thpool.wait();
}
Run Code Online (Sandbox Code Playgroud) algorithm ×5
c++ ×3
optimization ×2
r ×2
c ×1
java ×1
javascript ×1
python ×1
stl ×1
visual-c++ ×1