[征文] 黄易小说自生软件系统,以FORTH为例

楼主: enthos (影斯作业系统)   2020-03-23 00:05:12
很久以前看到黄易有两部小说提到:"自生软件系统"的观念,也就是让电脑程式
自己改写自己来演化。
多年前用这个关键字找到中国电脑杂志的两页图档,对照原创教授的名字,
找到相关的论文和BASIC程式。用现代的观点来看,那个程式只是用交谈式的问题,
产生符合使用者特定需求的新BASIC程式而已,能够申请数百万美元的研究经费
真是厉害。
很久之前人工智能是用LISP电脑语言来开发,日本投入大量资源来研究,
结果失败了。我个人比较喜欢用FORTH电脑程式语言来做研究。
原文(2014年找到及上传的):
https://sites.google.com/site/imehouse/Home/ching
3BFC27061090156069.pdf
简介: 永不过时的电脑软件—自生软件系统
作者:郑佑 来源期刊:《电脑应用时代》1991年 第4期 格式:PDF 页数:2页
自生软件是一个软件自动化概念,它的目的在于把目前所有的软件都加以改写,
转化成一种永久的、不会被计算机科技发展淘汰的形式。它可以永远不需要重写,
因为计算机会自动将其修正或改进。自生软件模仿有机体细胞的衍生原理,控制信息
均来自细胞内部,不受外界影响。自生软件系统预先设置了许多子程序,
根据硬件的变更、用户的新需求自行修正,一切控制来自软件内部,使软件脱离硬件
而独立,简化了计算机的应用。自生软件一旦推广,将一改现今计算机语言、操作系统
和其它软件的面貌。
原作者自夸的文章:
后科学之父郑佑 - Postscience
http://www.postscience.com/pschina.pdf
(1)机器人触摸的问题(触摸碰撞而无反弹)是牛顿和所有的科学家在过去300年
错过了一个问题。日本第六代计算机科学的失败主要是因为机器人不能触摸。
只有吴大猷和郑佑能思考并解决这个25变量的问题。
(2)第二个问题是是经济学,美国联储局没有预测到的两次金融危机,而后科学
创始人郑佑的估值系统公开预测储蓄和贷款危机和次贷祸。如何在包含五十种经济
因素的供应和需求中取得经济均衡? 只能在严格的数学基础上和不可能违反的自然
法则的无限电子估值系统中计算求得。
(3)第三个问题是软件的复杂性危机,只能用全面性,完全自动化的永久自生软件
系统来解决。
包含原本的 BASIC 程式的部分接口内容。
原作者的 slides:
http://www.slideshare.net/hughching
过期的专利在这:
Completely automated and self-generating software system
https://patents.google.com/patent/US5485601
Compeletely Automated And Self-generating Software System
http://www.jumpulse.com/
http://www.jumpulse.com/chineser.pdf
http://www.jumpulse.com/new.bas
之前实际执行的结果:
01/21/2014 17:42 50,090 new.bas
01/21/2014 17:42 50,090 old.bas
01/21/2014 18:37 127 TEST.BAS
C:\temp>more TEST.BAS
1 PRINT "hello hello"
2 LOCATE 25,1: PRINT "Type the <Enter> key to go to the main program...";
:LINE INPUT A$:CHAIN "NEW"
从目前还存在的 new.bas 可以看出原作者的做法:
运用问答的方式产生新的 TEST.BAS 再串接原有的 old.bas 复制成的 new.bas
62080 MISNUM=62080!:G$="LOCATE 25,1: PRINT "+CHR$(34)+
"Type the <Enter> key to go to the main program..."+CHR$(34)+";
:LINE INPUT A$:CHAIN "+CHR$(34)+"NEW"+CHR$(34):GOTO 61009
62090 MISNUM=62090!:ON VAL(ANSWER$(ANSNUM)) GOSUB 62091,62092,62093
:GOTO 61009
要做到相同的功能,用古老的 LISP 和现代的 Python 都能达成。
但是最容易实作这种系统的语言是 FORTH。
https://skilldrick.github.io/easyforth/
FORTH 的程式码由 ':' 开始定义 ';' 结束定义。
一个指令一个动作。
字串由 s" 开始 " 结束。
资料基本上是使用堆叠来运作。
FORTH 有特别的指令 evaluate 可以直接执行字串中的程式码。
https://repl.it/languages/forth
: main ." hello hello" cr ; main
: test s" 1 2 3" evaluate ; test
words
: test pad 1+ 127 accept pad c! pad count type ; test
https://www.tutorialspoint.com/execute_forth_online.php
: test s" 1 2 3" evaluate .s ; test
require random.fs utime drop seed !
: main 10 0 do i cr . 10 random . loop ; main
FORTH 有关键字,没有保留字,可以预先重定义数字:
: 1 9 ; : test 1 2 3 + + . cr ; test
将 1 定义成 9,1+2+3 的结果是 14
昨天找到一篇论文,跟我想像中的解决问题方法雷同:
也比这篇文章的原始实作方法更接近实务。
Genetic algorithms in Forth
https://arxiv.org/pdf/1807.06230.pdf
Abstract
A method for automatically finding a program (bytecode)
realizing the given algorithm is developed.
The algorithm is specified as a set of tests
(input data) → (output data).
Genetic methods made it possible to find the implementation of
relatively complex algorithms: sorting, decimal digits, GCD, LCM,
factorial, prime divisors, binomial coefficients, and others.
The algorithms are implemented on a highly simplified version of
Forth language.
Keywords: Genetic algorithm, Linear genetic programming,
Evolutionary programming, Forth.
作者: oopFoo (3d)   2020-03-23 08:59:00
看FORTH就推。
作者: gozule (好冷啊~~)   2020-03-23 12:40:00
以前玩过genetic programming,概念很好但是很难收敛
作者: damody (天亮damody)   2020-03-23 21:48:00
记得以前有个编译器线上课,版上有一堆高手去上过

Links booklink

Contact Us: admin [ a t ] ucptt.com