我正在研究基于NEAT算法的神经网络,该算法学会在Python 2.7中播放Atari Breakout克隆,我所有的部分都在工作,但我认为通过更好的计算物种适应度的算法可以大大改善进化.
神经网络的输入是:
产出是:
我可用于物种适应度计算的参数是:
breakout_model.score- int:该物种所玩游戏的最终得分breakout_model.num_times_hit_paddle- int:球拍击球的次数breakout_model.hits_per_life- int:每次生命中球拍击球的次数,以列表的形式出现; 例如,第一个元素是第一个生命的值,第二个元素是第二个生命的值,依此类推,最多为4个breakout_model.avg_paddle_offset_from_ball- decimal:球与桨叶中心之间在X方向上的平均线性距离breakout_model.avg_paddle_offset_from_center- decimal:框架中心与桨叶中心之间沿X方向的平均线性距离breakout_model.time- int:游戏的总持续时间,以帧为单位breakout_model.stale- boolean:游戏是否由于陈旧而被人工终止(例如球被卡住直接垂直弹跳而桨没有移动)如果您认为我需要更多关于游戏最终状态的数据而不仅仅是这些,我可能会实现一种非常容易实现的方法.
这是我目前的健身计算,我认为不是很好:
def calculate_fitness(self):
self.fitness = self.breakout_model.score
if self.breakout_model.num_times_hit_paddle != 0:
self.fitness += self.breakout_model.num_times_hit_paddle / 10
else:
self.fitness -= 0.5
if self.breakout_model.avg_paddle_offset_from_ball != 0:
self.fitness -= (1 …Run Code Online (Sandbox Code Playgroud) 首先,我想我可能会把这个问题标题很差,但是我想不出正确的话,所以请随意提出一个编辑,然后我会做出来,这样这个问题就更有教育意义并且与其他人相关.
我知道javax.Swing根本不能用于Android项目,我已经接受了这个并学习了基于Android XML的UI设计,但出于好奇,我想确切地知道原因.
我意识到手机的屏幕尺寸可能是Swing不能很好地处理的东西,但是什么是阻止开发人员简单地导入javax.Swing包(除了Android Studio之外根本不让它发生)变形和丑陋的摇摆窗口可能在Android设备屏幕上?我也意识到AWT和SWT也必须被导入,但同样的问题也适用于这些包.
我认为我对此缺乏了解可能真的源于缺乏对Java虚拟机和Android等价物的理解(Dalvik仍在使用,还是他们将冷火鸡切换到ART?).
与往常一样,非常感谢您提供的任何信息或阅读主题.我真的想要了解更多关于JVM,Dalvik和ART如何工作的基础知识.
一些基本事实引导我提出这个问题:
因此可以在Grails应用程序中编写Kotlin代码吗?
我在Grails 2.x上做了很多工作,最近在一份新工作中,我一直在使用Kotlin,Spring和Struts.我非常喜欢Kotlin的零安全性和类型推断功能,Kotlin的功能编程功能比Groovy更自然,更易于使用(最后一部分是纯粹的意见).
是否可以使用Grails来处理以下事情:
但是使用Kotlin来编写域类,控制器动作,服务,对象工厂等的实际逻辑.
可能不太可能,因为我猜测Grails的一些核心功能是通过动态类型实现的,但也许可以通过Gradle插件或直接的Grails插件实现.
我喜欢Grails的约定配置范例所提供的极端简洁性,但我更喜欢Kotlin的静态类型和类型推断.
如果我可以在Grails环境中在Kotlin中编写业务逻辑,那么对我来说,这将是最终的Web应用程序框架!
我正在尝试通过Python 2.7接口使用OpenCV来实现基于机器学习的OCR应用程序来解析图像文件中的文本.我正在使用本教程(为方便起见,我已重新发布以下代码).我是机器学习的新手,对OpenCV来说相对较新.
手写数字的OCR:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('digits.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Now we split the image to 5000 cells, each 20x20 size
cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]
# Make it into a Numpy array. It size will be (50,100,20,20)
x = np.array(cells)
# Now we prepare train_data and test_data.
train = x[:,:50].reshape(-1,400).astype(np.float32) # Size = (2500,400)
test = x[:,50:100].reshape(-1,400).astype(np.float32) # Size = (2500,400)
# Create …Run Code Online (Sandbox Code Playgroud) 我正在编程模拟,当用户选择创建新标签时,用户应该输入标签ID,标签的所有者以及标签所代表的对象.程序正在做的只是跳过扫描所有者的命令,我不太清楚为什么.我的代码如下(函数在iotlib.cpp中):
iotlib.cpp
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 20
struct tagInfo
{
char owner[MAX];
char object[MAX];
int id;
};
struct tre //TRE = Tag Read Event
{
int id;
char node[MAX];
int dx;
};
void initTag(struct tagInfo tag[], int numTags)
{
for(int i=0; i<numTags; i++)
{
printf("Enter the tag ID number: ");
scanf("%i", &tag[i].id);
printf("Enter owner of tag: ");
scanf("%c", &tag[i].owner);
printf("Enter the object the tag is attached to: ");
scanf("%c", &tag[i].object);
}
}
void generateTRE(struct tre event[], …Run Code Online (Sandbox Code Playgroud) 考虑一种情况,其中方法的主要逻辑仅应在特定条件下实际运行。据我所知,有两种基本方法可以实现此目的:
如果逆条件为真,则只需返回:
public void aMethod(){
if(!aBoolean) return;
// rest of method code goes here
}
Run Code Online (Sandbox Code Playgroud)
要么
如果原始条件为真,则继续执行:
public void aMethod(){
if(aBoolean){
// rest of method code goes here
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我猜想这些实现中哪个更有效取决于其编写的语言和/或由编译器/解释器/ VM(取决于语言)实现if语句和return语句以及可能的方法调用的方式。所以我的问题的第一部分是,这是真的吗?
我的问题的第二部分是,如果第一部分的答案是“是”,那么上述哪种代码流模式在C#/。NET 4.6.x中更有效?
编辑: 参考Dark Falcon的评论:这个问题的目的并不是要解决性能问题或优化我编写的任何实际代码,我只是对编译器如何实现每个模式的每个部分感到好奇,例如参数的缘故,如果它是在没有编译器优化的情况下逐字编译的,那会更有效吗?