創作內容

3 GP

11/7~,想做完全隨機技能(超出預期的技能,不須自己詳細設計的技能),補充停機問題

作者:李兒諳│2018-11-07 19:10:24│巴幣:6│人氣:138
這篇依然是先開放留言
若出現不滿意的留言後,刪留言關評論
我最近重心較放在知乎上面
沒什麼原因
個人覺得自己舉動會引來反應時
就不太想有舉動了!!
可以說是喜歡沒有人的地方
個人沒人理時可能會活躍些
而有反應(因為個人比較能對應的反應類型很少)時常會裝死

此外部份原因是
知乎比較好掌握一個人的方向(當然是那個人願意呈現出的方向)
就像Github一樣
可以較少交待在做的事情
想知道的話很容易可以查到那人願意透露或說展示的部份
雖然我近年來對人的好奇心已經降到很低的程度了
不過若有人寫較生活化的日記我可能還是會去看的
雖然我有看沒看基本上感覺不太出差異!!

今天突然想做完全隨機技能
完全的意思指的是說
不是隨機出個現有技能來使用這樣
也就是程序會很像機器學習
設計者不用殫心竭慮的具體設計
就能有技能跑出來
那為什麼沒看過別人做呢?
因為要實現隨機技能
沒看過的技能是用程式碼或者是技能腳本寫出來的
(腳本跟程式碼類似,只是設計的好的話寫起來可以少顧慮很多細節)
因此若要實現出「超乎預期的隨機技能」
要先有辦法隨機產生程式碼
然後再想辦法判斷產生出來的程式碼算不算是技能

類似我覺得機器學習最難理解的地方是 隨機出圖檔、音樂檔的過程
因為機器學習其它地方雖然不是很理解細節,但基本上都是在處理求極值問題
但隨機出圖檔,用怎樣的雜訊產生,這我就沒辦法理解
而我比較需要其實是隨機出圖檔的過程
前陣子的嘗試還構不成圖,但大致上算比完全沒方向時好一些
可是程式碼的隨機...
我想這邊可能會用得到Online Judge的手法
若我要做,也會先是以這個方向去做
就測資與程式輸出結果的比較
來判斷這程式是否是符合要求的程式

雖說看到不滿意的留言會刪留言關評論
但若同時看到接受的留言與不接受的留言時
會刪掉不接受的留言(可能遲些再刪,避免刪了後引起不滿再被連續留言)
保留接受的留言這樣
其實是可以直接黑名單
只是能的話我不太想加人黑名單
因為那樣改天再看到黑名單就會想起來
而被加入黑名單的人就算有所改變
我也是見不到改變
雖說會要黑名單大概就是不管改變與否都不想得知,不過...
嗯,大概是因為我過往也很白目
也被加過黑名單
所以能的話我不想加人黑名單
(有些網路、網頁遊戲不玩的原因也是類似黑名單的問題
僅是突然覺得不管加黑名單與否
都還是在玩同個遊戲的事實
想一想,覺得這遊戲放棄掉好像我會比較好受些就乾脆不玩了這樣)

就像是若我活著能的話我會想讓所有人死光光
但這是不能的
又或者說能,只是會有死亡先後順序的問題(理想是像龐貝古城)
那不是同時間的話我覺得不太公平,有違原則
既然不能
那就會希望活得好好的
(個人喜歡二分法世界,單純,沒疑慮
很多時候所謂中間立場就只是不願犧牲明顯表態
我現在就算中間立場
因為能的話我是想二分法的)

以前曾說我過去會隱藏自己的喜好
因為隱藏喜好也算是在保護自己
同時也不會去干擾別人
例如:
要是別人發現自己的構想曾被別人想出來
這個別人是匿名的比較好受
還是這人是知名的,甚至是自己認識的比較好受
(而且若是認識的
可能有些想法是在說話中無意交流過的
只是可能有一方記不起來
但還是有起到影響

像我很常會夢到沒聽過的音樂
可是睡醒後想一想
又覺得跟過往聽過的音樂(通常是間奏)還蠻像的
感覺有些像抄襲這樣
那夢到抄襲痕跡沒那麼明顯的歌
若直笛能大致吹得出來的話
我還是會記錄起來與分享啦

就像是有人說.mp3過濾掉人耳聽不到的頻率
但人耳聽不到不代表人體會沒感受
它的影響可能是很不顯著的)

有些像是網友、筆友的吸引力就是在於很多地方留有想像空間
當這人活著的痕跡太過明顯、形象過於立體時
就沒有朦朧的感覺、想像的空間了

回正題
嗯,要是研究產生完全隨機技能(產出超乎預期的技能、不是自己設計的技能)
研究結果異常不順利的話
我就回去研究影片檔格式
怎樣算異常不順利啊?
大概看我哪天開始分享影片檔格式的具體內容時
又沒有提到完全隨機技能這件事情時
Github也沒有新增些相關的檔案
大概就是異常不順利了
(異常不順利可能也僅是以現在的我來說不順利
那以現在的我來說怎樣算不順利
就是想到的手法去實作都確定做不出成果時
就算不順利
日後若有找到其它方法可能就突然解決
雖然對解法可能不算很滿意
像是之前調度場演算法跟eval()
正規解法應該是要自己寫個編譯器或直譯器類似的東西來處理
不過正規解法我試了一陣子是覺得很沒方向
以我來說的話感覺做不出來啦!!
調度場演算法可能做得出來
但eval()能完成的其它事情我應該是做不出來)

------------11/7 20:28更新----------------
稍微想了下
感覺情況確實不太樂觀
就不是簡易的隨機跑不出結果
就是隨機加上的條件太過複雜而失去了隨機的感覺與優點

先假設說一個程式碼片段是技能的話

它的程式輸出結果會是
*
**
***
****
*****

假如是這樣的話
那我要檢查隨機出的程式是不是技能
只要檢查輸出結果與這個相符就行
可是若加上這個對輸出結果的限制
其實很大程度就限制了想像力
例如說我們很可能會因此只能隨機出傷害型的技能
而隨機不出治療、輔助效果的技能

但若先不管這個問題的話
那剩下來的問題就是要如何隨機出程式碼
而這部份也不太樂觀
原因後述

那符合這程式的至少有三種寫法
1.
for(var i=0;i<=5;i++)
{
    for(var j=0;j<i;j++)
        document.getElementById("div_display").innerHTML+="*";
        
    document.getElementById("div_display").innerHTML+="<br>";
}

2.
for(var i=0;i<=5;i++)
{
    for(var j=0;j<=5;j++)
        i-j>0?document.getElementById("div_display").innerHTML+="*":document.getElementById("div_display").innerHTML+="";
        
    document.getElementById("div_display").innerHTML+="<br>";
}

3.
document.getElementById("div_display").innerHTML+="*"
document.getElementById("div_display").innerHTML+="<br>";
document.getElementById("div_display").innerHTML+="**"
document.getElementById("div_display").innerHTML+="<br>";
document.getElementById("div_display").innerHTML+="***"
document.getElementById("div_display").innerHTML+="<br>";
document.getElementById("div_display").innerHTML+="****"
document.getElementById("div_display").innerHTML+="<br>";
document.getElementById("div_display").innerHTML+="*****"
document.getElementById("div_display").innerHTML+="<br>";

不過
若我們事先不知道這三種寫法
還有沒有辦法隨機出來就不清楚了

但這三種不管要隨機哪一種
都跟隨機圖檔有類似的特徵在
就是說不能用隨機每個字元的方式
在合理時間內產生出理想結果

有太多種隨機結果是沒意義的

此外假如我們有辦法隨機出上面三種
其實還有可能會隨機出這樣的結果

4.
for(var i=0;i<=5;i++)
{
    for(var j=0;j<=5;j++)
        j-i<0?document.getElementById("div_display").innerHTML+="*":document.getElementById("div_display").innerHTML+="";
        
    document.getElementById("div_display").innerHTML+="<br>";
}

嗯,其實就僅是前面解法的變形
假若採用字元的隨機方式的話
更慘的情況是出現無數個以下這樣的情況

5.
//僅變數名稱改變的狀況
for(var a=0;a<=5;a++)
{
    for(var b=0;b<=5;b++)
        b-a<0?document.getElementById("div_display").innerHTML+="*":document.getElementById("div_display").innerHTML+="";
        
    document.getElementById("div_display").innerHTML+="<br>";
}

6.
//就是產生出多餘的迴圈
for(var i=0;i<=5;i++)
{
    for(var k=0;k<=5;k++);
    for(var j=0;j<=5;j++)
        j-i<0?document.getElementById("div_display").innerHTML+="*":document.getElementById("div_display").innerHTML+="";
        
    document.getElementById("div_display").innerHTML+="<br>";
}

所以肯定不能純用字元隨機的方法
可是若把程式拆成確定可以跑得出結果的再隨機
感覺就很可能會變成只跑得出自己想得到的答案類型

例如本來有辦法隨機出1,2,3的情況
但是把隨機後的程式碼限定範圍後
可能只跑得出第一種解法
甚至連第一種解法的變形解法都隨機不出來
(但若隨機技能只能隨機到這樣的程度
其實跟只隨機傷害值、傷害係數的效果相去不遠)
不過目標其實可以訂小一些
因為我目前感覺我就連第一種都隨機不出來就是了
感覺要隨機出第一種的狀況
要加限制的條件會超出"隨機"的感覺

---------11/7 20:55更新---------------------

突然想起來"停機問題"
可是停機問題的前提在我的狀況是否成立不太好說
我記得停機問題的前提是在圖靈機上運作
那圖靈機提供的操作記得是 儲存資訊於一個位置,可以跳轉到其它位置
可能還有其它的操作但我忘了
現在的程式語言、機器聽說是圖靈完備的
但圖靈完備跟只能做圖靈機的事情可能是兩回事吧
我一直不知道圖靈機有沒有考慮與週邊設備的溝通常見三種方法
1.輪詢 2.中斷 3.DMA(直接記憶體存取)
既然不知道那我就猜沒有
因為圖靈是知名歷史人物
若沒記錯的話,圖靈那時應該連滑鼠都還沒出現
而輪詢、中斷、DMA的製作者沒那麼出名(我根本不知道設計創始者是誰)

停機問題的通俗描述是說
能否寫個程式判斷個程式在有限時間內結束?

但是我們在產生隨機程式碼時
可以不用判斷出是否在有限時間內結束
只要一定時間內程式沒跑出預期結果就直接判定失敗即可
(跑程式碼的方法當然還是用Javascript的eval()
嗯...
其實我還沒測試過eval()能否正常處理
明天睡醒再處理好了)

-----------11/8--------------
睡醒後測了一下
eval()的功能還是很強
這樣寫大致上可以完成

var str="";

eval('for(var i=0;i<=5;i++) \
{ \
    for(var j=0;j<=5;j++) \
        i-j>0?str+="*":str+=""; \
\
        str+="<br>"; \
}\
setTimeout(after_eval,5000);');

//上述程式是在五秒後看出來的字串變成什麼樣子,\是用來連接下一行

function after_eval(){
    document.getElementById("div_display").innerHTML+= str;
}
問題是裡面的字串很難隨機出來

差異在哪?
疆域
我們一個程序不知道要用多少行才能完成
而若是隨機產生圖檔、音樂檔
音樂檔可以在段時間內隨機
圖檔會在固定大小中隨機
可是程序我們不知道要隨機幾行才能達到效果
那我們可以一行一行的隨機嗎?
例如要印出
*
**
***
****
*****
先隨機出有程序能完成
*(印出第一行)
然後再隨機出能印
*
**的程序片段

應該是可以
不過這麼做的話
會不會有些真的預料不到寫法不會被隨機出來就不清楚了

要隨機出技能或說程式片段有兩個麻煩
1.如何隨機出我們所要的
2.要如何在合理時間內隨機出我們所要的結果
(也就是說不能隨機出太多我們所不要的結果)

稍微想了下
先列幾個難點

1.程式碼不知道要隨機幾行
此外for、if一類帶block({})的,需要產生整個區塊
那哪些程式碼要放在區塊內,哪些要放在區塊外
還有巢狀的問題(就區塊裡面還有區塊,像雙層迴圈那樣)

2.隨機怎樣的條件式?

3.隨機幾個變數、變數的儲存內容是?

4.允許呼叫怎樣的函數

3跟4一起來看的話
理想狀況是可以限制隨機幾個變數
但以隨機三個變數來說的話
能順利運作的程式內容可能是
for(var i=1;i<=5;i++)
{
    for(var j=0;j<=5;j++)
        i-j>0?document.getElementById("div_display").innerHTML+="*":document.getElementById("div_display").innerHTML+="";
        
    document.getElementById("div_display").innerHTML+="<br>";
}
var temp_str= "     ";
for(var i=1;i<=5;i++)
{
    var temp_str2= temp_str.split('');
    temp_str2.splice(i-1,1,"*");
    temp_str= temp_str2.join("");
    
    document.getElementById("div_display").innerHTML+=temp_str;
    
    document.getElementById("div_display").innerHTML+="<br>";
}

第二種用字串跟陣列間轉換的比較麻煩
感覺正常的方法隨機不出第二種程式寫法

但目前其實我連第一種也不知道要怎麼隨機出來
今天(11/8 09:40)就先想到這邊為止吧
我想還是去研究影片檔格式
可能會比較有收獲些
這個就偶爾想一下好了
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4187536
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:停機問題

留言共 1 篇留言


ㄜ......我看不太懂

11-17 18:33

李兒諳
沒關係!!
就當成在許願即可11-17 18:58
我要留言提醒:您尚未登入,請先登入再留言

3喜歡★y541258 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:10/30起,研究電腦(... 後一篇:11/18,分享個知乎問...

追蹤私訊切換新版閱覽

作品資料夾

ilove487奇幻小說連載中
《克蘇魯的黎明》0684.險象環生看更多我要大聲說6小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】