2017-03-06 86 views
0

我試圖在1-9之間生成一組480個隨機整數。但有一些限制:隨機數生成 - 約束序列

  • 該序列在一行中不能包含2個重複數字。
  • 序列必須包括每80位序列內奇數正好是4序列和偶數的4個序列(以任何次序)(例如6 4 5 4 6 1)。

我已經能夠產生一組隨機數的帽子允許重複的數字,使用:

NumRep <- sample(1:9, 480, replace=T) 

,但仍未能解決如何讓數字來重複整個集,但不允許連續重複(例如2 5 3會好,2 5 5不會)。奇怪/偶數的限制讓我無處可尋。

對於上下文,這不是作業!我是研究人員,這是我正在創建的心理實驗的一部分。

任何幫助將不勝感激!

+4

歡迎來到Stackoverflow!在發佈問題時,請分享您的代碼,並嘗試儘可能好地解釋您的問題。現在,你所要求的東西很不清楚。 –

+0

謝謝您的回覆,並對缺乏清晰度感到抱歉 - 我編輯了我的答案。 –

+0

關於你的第二點,你是說在480個數字序列中的某個地方,你必須能夠找到連續的4個奇數(以evens爲界)和連續的4個偶數(以賠率爲界)? – Mist

回答

0

首先,這個問題失去了用這種條件模擬的「隨機」方式。反正這個碼與第一約束:

# Build a vector 
    C<-vector() 
    # Length of the vector 
    n<-480 
    # The first element 
    C<-sample(1:9,1) 
    # Complete the rest 
    for (i in 2:n){ 
    # Take a random number not equal to the previous one 
     C[i] <- sample(c(1:9)[1:9!=C[i-1]],1) 
    } 

    # It is an odd number? 
     C %% 2 == 0 
    # How many consecutive odd numbers are in the sequence? 
     # Build a table with this information 
     TAB <- rle(C %% 2 == 0) 
     # Maximum of consecutive odd numbers 
      max(TAB$lengths[TAB$values==T]) 
     # Maximum of consecutive even numbers 
      max(TAB$lengths[TAB$values==F]) 

我不明白的第二個制約因素,但我希望的代碼的最後一部分幫助。您應該使用該信息來交換一些值。

+0

隨着順序,你的意思是3個連續的奇數(偶數)?因爲如果你想做到這一點,可能的策略可能是先構建這些序列,然後在不遵循此屬性的其他數字之前和之後添加。 – R18