下面是我编写的智能软件的操作系统的大概运行过程,具体的代码见我的相关编程:https://mp.csdn.net/mp_blog/creation/editor/127817564。
- 操作软件第一次打开时,需要获得与打开各个文件及展示框来供读写。
#region //文件记录
int zsk1 = 8; int lingshilabel1 = 0; int ydbiaozhi = 0; int csbl = 1; int zzydxfqd1 = 0; int zsk = 0;
FileStream hd = new FileStream("D:\\tm.txt", FileMode.Create);
……
FileStream zzymddx = new FileStream("d://zzymddx.txt", FileMode.Open);//1
……
FileStream ydzs = new FileStream("d:// ydzs.txt", FileMode.Create);
#endregion
同时进行一些设置:比如:case 18:
fd = jlyd; break;
……
jlyd.txt这个文件是我预先建立的数据库,这个数据库是我先通过Mrds及vc#模拟一个机器人小车在屋内环境的运动,然后将小车的速度距离墙壁的距离作为数据记录在jlyd.txt中获得的。
- 点击button1后,再点击button3、 button4、 button5中的一个,小软件就会选取相应速度数据库的数据开始运行计算。小软件先进行一些设置。然后通过下面的代码进行周期性读取jlyd.txt中的数据作为数据传入,通过代码的运行,产生我们期望的计算,从而使数据库中记录的距离、速度之间建立记忆联系并与奖惩建立记忆联系,为后面小软件根据奖惩来选择速度做准备。而在小软件经过学习记忆后,点击button1后,再点击button2,小软件就会根据奖惩学习的结果,自动周期性的选择相应的速度获得奖赏逃避惩罚。如图1
小软件的周期性兴奋分为两种情况(如图2),一种是总的兴奋周期,一种是具体的兴奋周期,一个总的兴奋周期由四个具体的兴奋周期组成。每个总的兴奋周期由一个选择出来的主注意对象主导。之所以这样设计其中一种原因是因为在一个具体的兴奋周期中被选择出来的主注意对象其奖惩预期在一个具体兴奋周期中难于同步。而四个具体周期下,需要的各种兴奋、记忆的同步更容易实现。
下面的代码控制智能软件进行周期性的计算
#region //12周期性计算
int jrlabell = 0;
getfun(labelrecordnumber, ref jrlabell, zsk, fd);
for (int labelrecordnumberr = 2; labelrecordnumberr <= jrlabell + 1; labelrecordnumberr++)
{ …… }
#endregion //12周期性计算
每个计算周期都会重复以下事件。这些事件包括:接受刺激传入,易化兴奋、回忆、选择主注意对象、奖惩预期等等。下面是过程
- 计算准备,对时间、读写的展示框的设置。
“ zsk = 8; int jltime = 0; int jltimebc = 9584;
getfun(jltimebc, ref jltime, zsk, fd); jltime = jltime + 1; putfun(jltimebc, jltime, zsk, fd);
int qzqtime = zqtime; //设置时间标志。qzqtime前一兴奋周期的兴奋时间
zqtime = jltime;”
这段程序通过qzqtime、jltime、zqtime标志兴奋周期先后次序,能让后面的计算有序的进行下去。
#region // 周期参数标志label
//这一兴奋周期的时间.它是记忆柱总的兴奋时间,也是展示框的兴奋时间
if ((int)label == 1) //确定本兴奋周期读的展示框的标志(label)。
……
#endregion // 周期参数标志label
这段代码设置了本周期读写展示框的那一部分的数据。
- 计算运动传出。
通过记忆什么运动获得的奖赏大来选择运动。运动获得的奖赏数值越高,它越能够被强化,也越能够被选择
- 赋值奖惩。设计什么样的速度得到什么样的奖惩。
#region //1211奖赏参数
if (ydsrvalue == 30)
{
jcvalue = 7;
}
……
#endregion //1211奖赏
- 设置展示框,并利用展示框进行计算。
for (zsk = 1; zsk <= 16; zsk++) //获取与设置读写的展示框。有的展示框前一周期被读取的展示框的记录标志要归零,为后一兴奋周期准备。
{
lingshilabel = 0;
if (zsk == 8 | zsk == 9 | zsk == 3 | zsk == 1) continue;
……
} //for zsk=1 to 17
不同的计算需要读取不同的展示框
- 输入运动与刺激,兴奋相应中枢记忆柱。为相应的记忆回忆等等计算做准备。
例如:下面这段代码是如何利用展示框将小机器人距离墙壁的距离信息转化后传入相应的中枢。
//获得8个数据传入,传到对应的中枢相应的位置
recordnumbern = 0;
for (clengthn = 1; clengthn <= 8; clengthn++)
{
……
putfun(lingshilabel, xfqdrecordnumber, zsk, fd);
}
2)下面这段代码是如何使奖惩兴奋对应的中枢
#region //奖赏与惩罚刺激
n = 15; zsk1 = 19; int lingshilabel3 = 0;
#endregion //奖赏与惩罚刺激
3) #region //不易兴奋的记忆柱对易兴奋的抑制。这是智能软件重要的一功能。;
zsk = 5; xfqdrecordnumber = 0;
……
#endregion //不易兴奋的记忆柱对易兴奋的抑制。这是智能软件重要的一功能。;
这段代码计算的是基本记忆柱群中兴奋的不易兴奋的记忆柱对易兴奋的记忆柱的抑制。
4) 主注意对象的选择:
先对前一兴奋周期兴奋的易兴奋的记忆柱进行分类,为下面的主注意对象的选择等等计算做准备。
#region //对易兴奋的记忆柱进行分类记录
zsk = 6;
……
}
#endregion //对易兴奋的记忆柱进行分类记录
通过计算选择出主注意对象。
# region //选择获得主注意对象
xz = 0;
if ((biaozhi % 4) == 1)
……
# endregion //选择获得主注意对象
5)利用展示框记录的信息对传入刺激、主注意对象、主注意目的对象、状态中枢等等兴奋的记忆柱群或者记忆柱进行计算,来获得在这一兴奋周期被兴奋的记忆柱并记入相应的展示框,供下一兴奋周期计算。下面的代码执行的是这些计算。
#region //读取主要展示框,计算
for (zsk = 1; zsk < 13; zsk++)
{…… }
#endregion //读取主要展示框计算
6)利用展示框13、12进行奖惩计算获得本兴奋周期主注意对象的奖惩预期值
#region //奖惩传到奖惩预期
jrlabel = 0; zsk3 = 13;
……
#endregion //奖惩传到奖惩预期
#region //2获得兴奋的奖惩预期记忆柱;记入12
zsk1 = 19; zsk3 = 12;
#endregion //2获得兴奋的奖惩预期记忆柱;
#region //奖惩预期计算,及参数赋值
……
#endregion //奖惩预期计算
7) 计算主注意对象产生的动力预期值,与原有的主注意目的对象的动力进行比较,从而获得新的主注意目的对象,及其动力。
#region //目的对象的动力计算
if ((biaozhi % 4) >= 3)
//存入主展示框
#endregion //目的对象的动力计算
8)将每个兴奋周期的主注意目的对象记入相应展示框,每个周期都通过状态中枢对相应记忆柱产生一定的易化作用。
if (biaozhi == 24)
{
//目的对象
zsk = 1;
…… }
//目的对象
如图4,每个兴奋周期,都会先获得刺激传入兴奋的记忆柱、被选择出来的主注意对象对应的记忆柱,然后刺激传入兴奋的记忆柱、被选择出来的主注意对象对应的记忆柱、目的对象对应的状态中枢的记忆柱、其它兴奋的记忆柱都兴奋并传出兴奋,从而易化兴奋其它记忆柱,被易化达到兴奋阈值的记忆柱被记录到对应的展示框,参与下一周期的兴奋。同时被选择出来的主注意对象产生动力预期,通过比较产生新的主注意目的对象,参与下一周期的易化兴奋。
这样,在每个兴奋周期被易化达到兴奋阈值,而在下一周期兴奋的记忆柱,其受到主注意对象、目的对象、传入刺激、其它兴奋的记忆柱的由强到弱的易化兴奋。而在各个兴奋周期持续对“皮质”记忆柱产生强的易化作用的是目的对象。主注意目的对象是产生的动力预期最大,最能带来奖赏的对象。所有记忆的初始来源是刺激传入。由于越能够带来奖赏的刺激,越是得到强化,因而那些易化兴奋的记忆柱往往是与奖赏密切相关的,从而尽量保证了回忆兴奋的对象是最能带来奖赏的对象。
各个中枢的功能关系如图3
对人脑结构功能的模拟,不能机械的模拟。编程时对人脑结构功能我们应该只是抱着部分借鉴参考的态度,而主要是根据编程的特点及智能软件对环境的适应来设计智能软件的结构功能。