首页 > 编程语言 >2022秋程序设计Project2

2022秋程序设计Project2

时间:2022-12-30 11:00:42浏览次数:66  
标签:__ src 函数 GUI random 2022 程序设计 gym Project2

2022秋程序设计Project2

小黄和它的罐子——遗传算法、GUI、强化学习

欢迎光临Github寒舍 - 链接,此项目已经作为Repository发表其上。

  • 历史原因,/src下文件都注©,但/GUI/src.h采用CC BY-NC-ND 4.0

  • 本markdown文件介绍心路历程会很多,
    因为具体做法和各处的思路(详细的实现细节和原理解释)等等
    通通有各自对应的文档,或以Doxygen注释的形式附在源码中。

  • 本文采用CC BY-NC-ND 4.0


遗传算法——物竞天择,适者生存

使用C99以及更新的语言标准编写。

总范式

  • 尝试用C语言做到面向对象乃至泛型
  • 尽量多地使用C99新加入的语言规范当中好用的部分-
  • 尽可能提高程序运行效率
    保持参与OI和ACM习得的良好习惯

总思路

自下向上编写,因为大体思路早已清晰;
这种情况下自下而上利于稳扎稳打。

其实这相当于于先写一个个class,封装好成员对象,设计高可读性高复用性的接口(即grid.hobject.h),
然后把它们组合。这个过程会抽象掉很多东西,不必事无巨细地思考到底层。

类似于数学家们解题使用的传统方法:综合法。

大体经过 详见src文件夹下的README.md

特别关注

随机函数的质量很大程度影响最终结果!

以下是用标准随机函数(214013L 和 2531011L)小改后的随机函数,
分别代替srand()和rand()。

unsigned long long holdrand = 1ull;
void __cdecl set_random(unsigned long long _Seed)
{
    holdrand = _Seed;
}
/**
 * @brief Generate an unsigned random integar.
 *
 * @return ** unsigned
 *
 * 尽量做得原汁原味,所以不写成内联函数,甚至用__cdecl修饰。
 */
size_t __cdecl random(void)
{
    return (((holdrand = holdrand * 214013ull + 2531011ull) >> 32) & 0x7fffffff);
}

若编译,请不要修改随机函数(秋梨膏~)
使用src/library.h里面的random()及其配套函数会得到如下结果:


GUI

尝试使用SDL2

由于文档的匮乏,以及它对MinGW系编译器支持不佳,
在学习了数个晚上终于向屏幕显示出了一张hello world后……

最终放弃。

原打算使用Javax.swing

Java_src/test_GUI文件夹下可以看到一些GUI测试代码,
但是其学习成本依然比较高:

一些简单的过程仍需要设计独立的类来完成,
稍微复杂一点点的行为
即出现继承、多态、虚方法、实现接口等等繁多的OOP设计

这迫使我回归面向过程,或者说,转而有节制地面向对象。

转向EasyX

多年前在网上发现了EasyX,终于有用武之地了!

其简单使用模式以及用它构筑面向对象式GUI的方法已经总结起来写了一篇Pre,
详见Pre就好了(是长篇大论,放在Pre文件夹下)~
源码是markdown,推荐阅读PDF或者pptx


强化学习

人工神经网络

参阅了PJ文档给的“人工神经网络”维基百科后……嗯,毫无收获呢~

于是自己搜寻相关资料并且构建了一个ANN,放在typical_ANN.py里。

高高兴兴拿着ANN问大家,问了一圈被说了一圈……

听到的不外乎“zxr写过,问她”(戴老师语)
“这不应该跑有监督的算法吧”(tjw同学语)
“这边建议还是无监督学习”(讨论版上得到zxr姐姐的亲口答复)

于是搜寻资料,做

强化学习

强势回复!“已经在Anaconda里建好文件夹装OpenAI了[玫瑰]”

配置环境

对,我们用gym库,这样可以直接调用它写好了的马尔科夫决策过程

在此之前需要类似的代码(

conda create --name gymlab python=3.10
activate gymlab
git clone https://github.com/openai/gym.git
cd gym
pip install -e '.[all]'
export PYTHONPATH=你的gym⽬录:$PYTHONPATH

完成之后每次activate gymlab
然后启动python,调用gym.xx()就好了

编写代码

自己实现一个Env类,提供__init__()_step()_reset()render()等方法
注意__init__()中给出状态空间、动作集合、回报函数、转移函数等列表或字典,
然后调用gym.make()即可生成这样的训练对象。


额外说明

高分策略是使用Java_src生成的。

标签:__,src,函数,GUI,random,2022,程序设计,gym,Project2
From: https://www.cnblogs.com/quanqiutong-u1/p/17014352.html

相关文章

  • 优顶特技术荣登2022年创新型中小企业名单
    2022年12月2日,深圳市罗湖区企业服务中心发布了关于罗湖区2022年创新型中小企业名单的公示,优顶特技术有限公司(以下简称”优顶特技术“)凭借过硬的研发和创新能力等优势......
  • 年终总结2022
    年初搞了Vue3+ts的项目,从刚接触vue3时的vue-cli转为vite,体验非常不错。做了一套后台管理系统模板,elementPlus/TDesign两个UI框架都有做。菜单和路由的关系配置,优雅切换......
  • 【2022-12-22】连岳摘抄
    23:59人的一生中,最光辉的一天并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志的那一天。                  ......
  • 年终盘点(一)丨2022计讯物联产品家族创新亮点一览
    转眼间,2022年逐渐接近尾声。回顾过去的一年,计讯物联一步一步奋力前行,以创新赋能产品,以口碑见证品牌,以出色的表现收获赞誉,给这一年画下了圆满句号。在此,计讯物联感谢全球客......
  • 2022年终总结
    前言今年是我在生活中成长最迅速的一年,也是我在大人的眼中逐渐变得懂事的一年,不再沉迷于游戏,在工作中敢于承担责任,和同事和朋友相处更加自然,这一切的改变都源自于戒游戏......
  • 【组会】 2022_12_30 4d mmwave radar
    突然想了解一下4d毫米波雷达成像的原理,比如通过哪些图(RDI?RAI?建模等等但找了一圈发现并没有。。Angle-InsensitiveHumanMotionandPostureRecognitionBasedon4......
  • 2022/12/30
    今天调了下elf,还没整完,打算全部做完了塞一篇文章里好菜啊,一天了才一个还没整完...自我定位清晰来不及了,来不及了.jpg星期六还有事,一天都没空,感觉好多事要做啊星期五......
  • 2022 年终总结
    忙忙碌碌无建树,浑浑噩噩又一年又到了感慨时间过得飞快的日子了。疫情依旧,工作按部就班,维护中的项目反而发现了bug,导致几乎有一半时间在旧代码堆里摸爬滚打,忙碌又没有成就......
  • NOIP2022退役记
    退役记标签(空格分隔):重要待到秋来九月八,我花开后百花杀方才想了很长时间,我感觉我应该写这个东西,为我这一年多的竞赛生涯画上一个完整的句号。考试失利,我经历过许多,这次......
  • 考研数学练习题-2022年12月28日
    数量:10......