2014-07-04 5 views
2

Graphs.jl 모듈을 사용하여 그래프를 만들려고합니다 (2D Ising Model을 시뮬레이트합니다).Graphs.jl을 사용하여 정점의 값 변경

this 질문으로 단순 그래프를 구성하는 방법을 발견했지만 제공된 대답을 사용하여 꼭지점 값을 변경할 수있는 방법을 찾을 수 없습니다. 어쩌면 다른 그래프 유형을 시도해야하지만 대답을 찾기 위해 문서를 실제로 이해할 수 없었습니다

답변

2

이 패키지는 꽤 좋아 보이지만 간단한 그래프는 정점으로 정수가 있으므로 레이블을 지정할 수 없습니다. 따라서, 당신은 더 일반적인 유형 ExVertexExEdgesee here을 사용해야합니다. 이 인터페이스를 올바르게 사용하려면 REPL을 사용하여 올바른 유형의 구성이 필요합니다. 여기 그래프 구성을 돕기 위해 사용할 수있는 모듈이 있습니다. 당신이 일반적인 그래프에 액세스하면

module GraphUtil 
    import Graphs 
    export empty_graph,add_label!,add_connection! 

    function empty_graph() 
     va::Array{Graphs.ExVertex,1} = {} 
     ea::Array{Graphs.ExEdge{Graphs.ExVertex},1} = {} 
     G = Graphs.graph(va,ea) 
    end 

    function add_label!(G,s::String) 
     v = Graphs.ExVertex(Graphs.num_vertices(G) + 1,s) 
     Graphs.add_vertex!(G,v) 
     v 
    end 

    function add_connection!(G,from::Int,to::Int) 
     va = Graphs.vertices(G) 
     e = Graphs.ExEdge(Graphs.num_edges(G) + 1,va[from],va[to]) 
     Graphs.add_edge!(G,e) 
     e 
    end 
end 

, 정점 라벨은 쉽게

julia> using Graphs 
julia> using GraphUtil 
julia> G = empty_graph() 
Directed Graph (0 vertices, 0 edges) 

G에 "A"와 "B"라고 표시된 새로운 정점을 추가로 설정 될 수있다; 그들은 인덱스 1과 2를해야합니다

julia> add_label!(G,"a") 
vertex [1] "a" 
julia> add_label!(G,"b") 
vertex [2] "b" 

연결 정점 1과 정점이

julia> add_connection!(G,1,2) 
edge [1]: vertex [1] "a" -- vertex [2] "b" 

정점의 목록을 가져옵니다

julia> va = vertices(G) 
2-element Array{ExVertex,1}: 
vertex [1] "a" 
vertex [2] "b" 

변경 라벨 및/또는 정점의 속성 1

julia> va[1].label = "c" 
"c" 

julia> vertices(G) 
2-element Array{ExVertex,1}: 
vertex [1] "c" 
vertex [2] "b" 

julia> va[1].attributes["weight"] = 2 
2 

julia> vertices(G)[1].attributes 
Dict{UTF8String,Any} with 1 entry: 
    "weight" => 2 
+0

이 질문을 던졌습니다. xD 나는 [이 요지] (https://gist.github.com/ohadle/11323991)에 대한 답을 찾았고 그것을 이미 모듈을 구현하는 가이드로 사용했다. (주요 포인트는'g = graph (new_vs, new_es , is_directed = g_dict [ "directed"])')를 사용하여 그래프를 만듭니다. 그러나 당신의 대답에 대해 대단히 감사합니다! 귀하의 모듈은 아주 좋습니다. – kaslusimoes

+0

@kaslusimoes 물론, 나는 Julia가 필요한 곳에 다가 갈 수 있다고 생각하지만, 최소한 노력의 절반은 모든 기부금을 사용할 수있게하는 것입니다. 문서 부족으로 실망 할 수 있습니다. 내 목표는 아무 것도 답을 얻지 못하게하는 것입니다. 그것이 당신을 위해 어떻게 작동하는지 관심이 있습니다. – waTeim

+0

직접적인 동기 부여가 있었기 때문에 제 구현은 당신만큼 일반적이지 않았습니다. (그리고이 그래프를 작성하는 게으름 때문에 매트릭스가 아주 빨리 바뀌 었습니다.) 어쨌든 [this gist] (https://gist.github.com/kaslusimoes/3c38ea40d7145dad7e03) 또는 [최종 버전]에서 [this repo] (https://github.com/kaslusimoes/)에서 확인할 수 있습니다. MyIsing.jl) – kaslusimoes