- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在人工智能课上有一个作业。
这是一个我们必须使用 R 中的遗传算法(使用 GA 库)来解决的问题。我正在寻找一些想法来解决这个问题。
野蛮人围攻一座城市。将军下令一天中每小时必须有多少士兵守卫城墙。这是他的 table :
Time of the day | Number of soldiers
00:00 - 01:00 150
01:00 - 02:00 160
02:00 - 03:00 160
03:00 - 04:00 170
04:00 - 05:00 350
05:00 - 06:00 380
06:00 - 07:00 400
07:00 - 08:00 420
08:00 - 09:00 450
09:00 - 10:00 470
10:00 - 11:00 500
11:00 - 12:00 500
12:00 - 13:00 450
13:00 - 14:00 350
14:00 - 15:00 300
15:00 - 16:00 300
16:00 - 17:00 310
17:00 - 18:00 350
18:00 - 19:00 350
19:00 - 20:00 330
20:00 - 21:00 300
21:00 - 22:00 250
22:00 - 23:00 200
23:00 - 24:00 170
国防指挥官希望士兵们在巡逻时完全集中注意力,所以他下达了这样的命令:
两种可能的方法(到目前为止):
GA 的适应度函数会接受一定数量的焊料然后进行模拟:
创建一个初始种群(士兵)并在适应度函数中应用来自指挥官的规则(我真的不知道如何在这里定义上述规则)然后运行 GA 直到我们得到一些有用的分数。
最佳答案
由于作业已经结束(是的,我和 OP 上了同一个类(class)),这是一个非常有趣的问题,我在这里发布我的解决方案:
library(GA)
Fitness <- function(x) {
x <- as.integer(x)
# z represents required soldiers at each hour
z <- c(150,160,160,170,350,380,400,420,450,470,500,500,450,350,300,300,310,350,350,330,300,250,200,170)
y <- rep(0,31)
for (i in 1:length(x)) {
y[i] <- y[i] + x[i]
y[i+1] <- y[i+1] + x[i]
y[i+2] <- y[i+2] + x[i]
y[i+3] <- y[i+3] + x[i]
#resting 4, 5
y[i+6] <- y[i+6] + x[i]
y[i+7] <- y[i+7] + x[i]
}
for (i in 1:7) {
y[i] <- y[i]+y[24+i]
}
y <- y[1:24]
p <- y >= z
if (FALSE %in% p) { return(-3000) }
return(-sum(x))
}
GA <- ga(type = "real-valued", fitness = Fitness, min = rep(0, 24), max = rep(150, 24), popSize = 24, suggestions = sol, maxiter = 5000, run = 5000, pmutation=0.9)
summary(GA)
sol <- (as.integer(GA@solution[1, ]))
sol
sum(sol)
GA 生成一个向量,其中包含每小时开始 watch 的士兵人数(有 24 小时,这就是为什么有 24 个零和 24 乘以 150),并使用该向量调用 Fitness
函数。
Fitness 函数首先将实数转换为整数(R as.integer
函数只是去掉小数点后的任何数字,不四舍五入),然后将士兵分配给其 6 小时的工作。它通过将从 x[i]
开始的士兵数量添加到 y[i, i+1, ... i+7]
而没有这两个小时士兵休息时。
因为士兵全天候守卫,y
中的最后 7 个小时被添加到 y
的前 7 个小时,然后只有 的前 24 个值>y
被考虑。
然后我们将 watch 上生成的士兵向量与所需向量进行比较,如果向量中有任何FALSE
,Fitness
返回一个非常大的负值数字(GA 总是取较大的数字作为更好的数字)。
最后我们想“雇佣”尽可能少的士兵,这就是我们否定结果的原因(需要的士兵数量越少 = 否定数量越高),以便 GA 找到最好的结果。
剩下的就很明显了,我们调用 GA 函数,修改它的设置并显示结果。
关于r - 守卫城墙的士兵——作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045988/
我正在从 Stata 迁移到 R(plm 包),以便进行面板模型计量经济学。在 Stata 中,面板模型(例如随机效应)通常报告组内、组间和整体 R 平方。 I have found plm 随机效应
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我想要求用户输入整数值列表。用户可以输入单个值或一组多个值,如 1 2 3(spcae 或逗号分隔)然后使用输入的数据进行进一步计算。 我正在使用下面的代码 EXP <- as.integer(rea
当 R 使用分类变量执行回归时,它实际上是虚拟编码。也就是说,省略了一个级别作为基础或引用,并且回归公式包括所有其他级别的虚拟变量。但是,R 选择了哪一个作为引用,以及我如何影响这个选择? 具有四个级
这个问题基本上是我之前问过的问题的延伸:How to only print (adjusted) R-squared of regression model? 我想建立一个线性回归模型来预测具有 15
我在一台安装了多个软件包的 Linux 计算机上安装了 R。现在我正在另一台 Linux 计算机上设置 R。从他们的存储库安装 R 很容易,但我将不得不使用 安装许多包 install.package
我正在阅读 Hadley 的高级 R 编程,当它讨论字符的内存大小时,它说: R has a global string pool. This means that each unique strin
我们可以将 Shiny 代码写在两个单独的文件中,"ui.R"和 "server.R" , 或者我们可以将两个模块写入一个文件 "app.R"并调用函数shinyApp() 这两种方法中的任何一种在性
我正在使用 R 通过 RGP 包进行遗传编程。环境创造了解决问题的功能。我想将这些函数保存在它们自己的 .R 源文件中。我这辈子都想不通怎么办。我尝试过的一种方法是: bf_str = print(b
假设我创建了一个函数“function.r”,在编辑该函数后我必须通过 source('function.r') 重新加载到我的全局环境中。无论如何,每次我进行编辑时,我是否可以避免将其重新加载到我的
例如,test.R 是一个单行文件: $ cat test.R # print('Hello, world!') 我们可以通过Rscript test.R 或R CMD BATCH test.R 来
我知道我可以使用 Rmd 来构建包插图,但想知道是否可以更具体地使用 R Notebooks 来制作包插图。如果是这样,我需要将 R Notebooks 编写为包小插图有什么不同吗?我正在使用最新版本
我正在考虑使用 R 包的共享库进行 R 的站点安装。 多台计算机将访问该库,以便每个人共享相同的设置。 问题是我注意到有时您无法更新包,因为另一个 R 实例正在锁定库。我不能要求每个人都关闭它的 R
我知道如何从命令行启动 R 并执行表达式(例如, R -e 'print("hello")' )或从文件中获取输入(例如, R -f filename.r )。但是,在这两种情况下,R 都会运行文件中
我正在尝试使我当前的项目可重现,因此我正在创建一个主文档(最终是一个 .rmd 文件),用于调用和执行其他几个文档。这样我自己和其他调查员只需要打开和运行一个文件。 当前设置分为三层:主文件、2 个读
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我的 R 包中有以下描述文件 Package: blah Title: What the Package Does (one line, title case) Version: 0.0.0.9000
有没有办法更有效地编写以下语句?accel 是一个数据框。 accel[[2]]<- accel[[2]]-weighted.mean(accel[[2]]) accel[[3]]<- accel[[
例如,在尝试安装 R 包时 curl作为 usethis 的依赖项: * installing *source* package ‘curl’ ... ** package ‘curl’ succes
我想将一些软件作为一个包共享,但我的一些脚本似乎并不能很自然地作为函数运行。例如,考虑以下代码块,其中“raw.df”是一个包含离散和连续类型变量的数据框。函数“count.unique”和“squa
我是一名优秀的程序员,十分优秀!