新手问题 數學問題

supremewnp · 2013年01月17日 · 最后由 AlphaLiu 回复于 2013年01月24日 · 2420 次阅读

請問下面這段語法是在說什麼? 我 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 = bitstring[off...(off+bits_per_param)].reverse

param.size.times do |j|

sum += ((param[j].chr=='1') ? 1.0 : 0.0) * (2.0 ** j.to_f)

end

#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)

end

return child

end

<< 是 append, "a" << "b" 结果就是 "ab" rand() 是取 0 到 1 之间的随机数,这种写法就是以 rate 的几率来随机 flip 一位的,和模拟基因变异的做法差不多...

有点意思,我想问楼主你这些问题是哪里的呢?能发个地址吗?一起学习学习

這是參考 clever algorithms 書裡面的程式碼 有關人工免疫系統的

感觉这些都是 ruby 基本的语法问题而已吧,懂点基础应该没问题的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号