小编Vin*_*ent的帖子

如何为遗传算法的棋盘游戏策略选择一个好的表示?

对于我的学士论文,我想写一个学习玩Stratego游戏的遗传算法(如果你不知道这个游戏,假设我说国际象棋可能是安全的).我以前从未做过实际的人工智能项目,所以看到我实际上对实现的了解有点少,这让人大开眼界.

我坚持的事情是为实际策略提供一个很好的代表.我可能会犯一些思考错误,但遇到的一些问题:

  • 我不认为你会有一个包含董事会职位之间很多转换的表示,因为那只会强制它,对吧?
  • 决策树的分支看起来像什么?我提出的任何表示都没有可互换的分支......如果我要使用一个字符串,这显然也很常见,这些位代表什么?
  • 我是否将分数分配给某些部分之间的距离?我怎么代表那个?

我认为经过三年多的学习后我应该知道这些事情,所以我觉得很愚蠢 - 这看起来像我根本没有任何线索.仍然,任何关于谷歌的帮助或提示将不胜感激!

artificial-intelligence data-representation genetic-algorithm

3
推荐指数
1
解决办法
1222
查看次数

为什么通过借用 u32 闭包可能比当前函数寿命更长?

我越来越

错误[E0373]:闭包可能比当前函数的寿命更长,但它借用了row_nr当前函数所拥有的

我不希望这样,因为row_nr是 a u32,所以我希望它被复制而不是移动:


fn get_neighbours(values: &Vec<Vec<u32>>, row: usize, col: usize) -> Vec<u32> {
    vec![
        values.get(row - 1).and_then(|cols| cols.get(col)),
        values.get(row).and_then(|cols| cols.get(col - 1)),
        values.get(row).and_then(|cols| cols.get(col + 1)),
        values.get(row + 1).and_then(|cols| cols.get(col)),
    ].into_iter().filter_map(|value_opt| value_opt.map(|value| *value)).collect()
}

fn get_points(values: Vec<Vec<u32>>) -> Vec<(u32, Vec<u32>)> {
    values
        .iter()
        .enumerate()
        .flat_map(|(row_nr, columns)| {
            columns.iter().enumerate().map(|(column_nr, height)| {
                let neighbours = get_neighbours(&values, row_nr, column_nr);
                (*height, neighbours)
            })
        }).collect()
}
Run Code Online (Sandbox Code Playgroud)

完整错误消息:

  --> src/lib.rs:16:44
   |
16 |             columns.iter().enumerate().map(|(column_nr, height)| {
   |                                            ^^^^^^^^^^^^^^^^^^^^^ may …
Run Code Online (Sandbox Code Playgroud)

closures rust borrow-checker

3
推荐指数
1
解决办法
1058
查看次数

如何在跨源请求中保留会话数据?

我是使用Express和Connect的新手,所以我希望我做一些有点简单解决方案的蠢事......

基本上,我有一个用户使用Persona登录的页面.要验证身份验证尝试,我使用express-persona.据推测,该模块将用户经过验证的电子邮件地址保存在会话变量中(默认情况下为req.session.email).

现在,登录后,用户可以发表评论,此评论将与用户登录的电子邮件地址一起保存.当提供表单的服务器与处理评论发布的服务器相同时,这很好用.但是,当它们不同时(假设用户填写表单http://localhost:8001,而浏览器然后发送一个http://localhost:8000应该保存注释的POST请求),突然req.session.email值为undefined.

我正确设置了跨源资源共享.表格是这样发送的(使用jQuery):

$.ajax('http://localhost:8000/post/comment',
       {
           data: {comment: $('#commentField').val()},
           type: 'POST',
           xhrFields: {withCredentials: true}
       }
);
Run Code Online (Sandbox Code Playgroud)

(注意xhrField: {withCredentials: true}- 会话cookie被传递,我通过检查网络请求来验证.)

服务器设置(我认为)正确的CORS头:

res.header('Access-Control-Allow-Origin', 'http://localhost:8001');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
res.header('Access-Control-Allow-Credentials', 'true');
Run Code Online (Sandbox Code Playgroud)

当我添加时console.log(req.cookie),我看到sessionIdcookie与POST请求一起发送的cookie具有相同的值.

但是: console.log(req.session.email)显示undefined跨源请求 - 再次,当请求来自同一源时,它可以正常工作.

我究竟做错了什么?

session connect node.js cors express

2
推荐指数
1
解决办法
3035
查看次数

为什么即使已经调用了API网关回调,我的Lambda函数也会超时?

我有一个AWS API Gateway方法,可以将请求代理到AWS Lambda.但是,日志中的以下内容在三秒后出现错误:

转换前的端点响应体:{"errorMessage":"2017-09-05T16:30:49.987Z 922186c0-9257-11e7-9db3-51921d5597a2任务在3.00秒后超时"}

因此,我继续检查我的Node 6.10 AWS Lambda函数,看看它为何超时.我在每个函数调用之前和之后都添加了日志语句.令人惊讶的是,它完成了它应该做的所有事情:称为API网关回调,然后在数据库之后运行查询.所有需要0.6秒,据我所知,没有其他代码可以运行.然而,它似乎继续运行三秒钟的剩余时间,然后超时.(我想,这是因为我要打开与数据库的连接.)

我在callback调用之前和之后放置的日志语句表明该调用在不到半秒的时间内执行.然而,该响应似乎没有进入API网关,而三秒后的错误确实如此.

可能是什么原因,我该如何调试呢?

amazon-web-services node.js aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
2905
查看次数

使用字符串与枚举作为工厂方法的参数?

我最近正在阅读这个博客https://blog.cleancoder.com/uncle-bob/2021/03/06/ifElseSwitch.html这段让我很困惑:

小心那个令牌 x。不要试图使它成为一个枚举或任何需要在红线上方声明的东西。整数或字符串是更好的选择。它可能不是类型安全的。事实上,它不可能是类型安全的。但它将允许您保留架构的组件结构。

如果我们在高层模块中声明一个枚举,那么低层模块不仍然依赖于高层模块吗?如果是这样,那么在这种情况下使用枚举有什么问题?

enums design-patterns factory solid-principles

2
推荐指数
1
解决办法
277
查看次数