[徵文] 黃易小說自生軟體系統,以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