新手问题 數學問題

supremewnp · January 17, 2013 · Last by AlphaLiu replied at January 24, 2013 · 2469 hits

請問下面這段語法是在說什麼? 我 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 基本的语法问题而已吧,懂点基础应该没问题的

You need to Sign in before reply, if you don't have an account, please Sign up first.