我使用R(和igraph包)創建了一個具有100個節點的隨機(Erdos-Renyi)網絡。每個節點已被隨機分配了0或1的屬性。將簡單多數規則應用於隨機網絡中的節點使用R
我需要在這些節點上應用簡單多數規則,以便如果大多數節點的鄰居具有屬性0,那麼節點的屬性會發生變化也可以爲0(如果大多數爲1,則爲1)。它需要按照它們的編號(1-100)反覆遍歷網絡中的所有節點,並應用簡單多數法則。
此外,我不知道如何反覆遍歷每個節點,直到節點停止更新。
有人可以提出解決方案嗎?
非常感謝提前。
我使用R(和igraph包)創建了一個具有100個節點的隨機(Erdos-Renyi)網絡。每個節點已被隨機分配了0或1的屬性。將簡單多數規則應用於隨機網絡中的節點使用R
我需要在這些節點上應用簡單多數規則,以便如果大多數節點的鄰居具有屬性0,那麼節點的屬性會發生變化也可以爲0(如果大多數爲1,則爲1)。它需要按照它們的編號(1-100)反覆遍歷網絡中的所有節點,並應用簡單多數法則。
此外,我不知道如何反覆遍歷每個節點,直到節點停止更新。
有人可以提出解決方案嗎?
非常感謝提前。
你可以嘗試這樣的事情對於一個圖G:
for (i in 1:100) {
ones <- 0
zeros <- 0
#look through the neighbors of the node and count how many ones and zeros it
#is connected to
modified = FALSE
if (ones > zeros) {
if (V(g)$value[which(V(g) == i)] == 0) {
modified = TRUE
V(g)$value[which(V(g) == i)] = 1
}
} else if (ones < zeros) {
if (V(g)$value[which(V(g) == i)] == 1) {
modified = TRUE
V(g)$value[which(V(g) == i)] = 0
}
}
}
我不會寫代碼通過鄰居看並計算它連接到的節點數量。你可以輕鬆地做到這一點。
但是我提供的代碼會遍歷所有您正在查看的節點的相鄰節點,並根據其相鄰節點的值將其屬性值更改爲0或1。
粗略看看你的代碼,告訴我你的代碼應該工作(但我不熟悉igraph包)。
一對夫婦的可能性我能想到的:
set.vertex.attribute
不工作,你期望的方式要評估這兩種情況,當您檢查條件one > zero
時,還應該檢查結果是否確實正在更改節點。
這也將有助於你以後當你將此規則應用於網絡,直到沒有什麼變化:只需創建一個標誌,modified = FALSE
,然後將其設置爲TRUE
如果任何節點被更新。然後,您可以簡單地包裝現有的代碼在while
循環:while(!modified)
在最後的if語句裏,你想要來檢查節點的'get.vertex.attribute'是否與您現在設置的屬性相同。即如果一個節點的簡單大部分爲1,並且其'get.vertex.attribute'爲0,則可以將修改後的標誌設置爲'TRUE',反之亦然。 然後,在開始的while循環的每次迭代中,將標誌重置爲「FALSE」。這樣,每次獲得所有十個節點中的簡單多數時,您可以看到之後是否有更新。 –
不,你需要檢查它是否被修改,而不僅僅是設置標誌。 –
我會在第一個條件中描述它:'one> zero'。只需更改第二個條件的數字即可。 在將節點的屬性賦值爲1('V(graph)$ value [which(V(graph)== i)] = 1')之前,首先檢查節點*是否已經是* 1。如果不是,設置'modified'爲'TRUE':if(V(graph)$ value [which(V(graph)== i)] == 0){modified = TRUE} else {V(graph)$ value [which V(圖)== i)] = 1}' –
SO並不是一羣可以根據(模糊)規範爲您編寫代碼的代碼寫作精靈。在請求解決方案之前,請演示您嘗試解決問題的方法。 –
請閱讀一些指導原則:[** here **](http://stackoverflow.com/help/on-topic),[** here **](http://meta.stackoverflow.com/help/how-to-ask)和[** here **](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。 [「詢問代碼的問題必須包括嘗試的解決方案,爲什麼他們不工作,以及預期的結果」](http://stackoverflow.com/help/on-topic) – Henrik