請問下面這段語法是在說什麼? 我 debug 時跑出內容讓我看不懂
變數名稱 值 bitstring "00111001011110110000000001111100" off 16 bits_per_param 16
param = bitstring[off...(off+bits_per_param)].reverse
結果
param 是 "0011111000000000"
請問發生了什麼事?
先从 bitstring 截取一段子字符串:截取的范围是从下标为 off (16) 的字符起,到下标为 off + bits_per_param (32) 的字符前
16...32 其实就是 bitstring 的后半段:"0000000001111100"
然后再 reverse, 结果就是 "0011111000000000" 了
那我可以在問一下 變數名稱 值 param "0011111000000000" 語法 param.size.times do |j|
sum += ((param[j].chr=='1') ? 1.0 : 0.0) * (2.0 ** j.to_f)
end
結果 變數名稱 值 sum 124.0
為什麼會跑出 124?
補一下 上面的語法 因為是 off, sum = i*bits_per_param, 0.0
param.size.times do |j|
#2 楼 @supremewnp 你这段程式的运算过程就和转换 2 进制是一样的,不过是逆序后的转换
"0011111000000000".reverse.to_i 2 #=> 124
其实就是求了二进制数 0000000001111100
謝謝您 可以再請問一個語法 child << ((rand()<rate) ? ((bit=='1') ? "0" : "1") : bit) 想請問 << 這個符號是什麼意思? 然後 rand()<rate 這是什麼意思? 以下是程式參數值 bitstring "01110000000001001100001110011011" rate 0.15446243284790956 結果 child "01010000001001010100101111011011" 發現有些數字,0 變 1,1 變 0 請問發生什麼事情了?
以下是完整的程式碼 def point_mutation(bitstring, rate)
child = ""
bitstring.size.times do |i|
bit = bitstring[i].chr
child << ((rand()<rate) ? ((bit=='1') ? "0" : "1") : bit)
return child
<< 是 append, "a" << "b" 结果就是 "ab" rand() 是取 0 到 1 之间的随机数,这种写法就是以 rate 的几率来随机 flip 一位的,和模拟基因变异的做法差不多...
<<
"a" << "b"
"ab"
rand()
有点意思,我想问楼主你这些问题是哪里的呢?能发个地址吗?一起学习学习
這是參考 clever algorithms 書裡面的程式碼 有關人工免疫系統的
感觉这些都是 ruby 基本的语法问题而已吧,懂点基础应该没问题的