ฉันกำลังทำงานกับจูเลียด้วยไลบรารี Metagraphs.jl
เพื่อดำเนินการแก้ไขปัญหาการปรับให้เหมาะสม ฉันต้องการรับชุด/รายการของขอบในกราฟที่ชี้ไปยังชุดจุดยอดพิเศษที่มีคุณสมบัติเฉพาะ 2 ประการที่เหมือนกัน
การเดาครั้งแรกของฉันคือการได้รับชุด/รายการจุดยอดก่อน แต่ฉันกำลังเผชิญกับปัญหาแรกซึ่งก็คือฟังก์ชัน filter_vertices
ดูเหมือนจะไม่ยอมรับที่จะใช้ตัวกรองกับคุณสมบัติมากกว่าหนึ่งรายการ นี่คือตัวอย่างด้านล่างของสิ่งที่ฉันต้องการทำ:
g = DiGraph(5)
mg = MetaDiGraph(g, 1.0)
add_vertex!(mg)
add_edge!(mg,1,2)
add_edge!(mg,1,3)
add_edge!(mg,1,4)
add_edge!(mg,2,5)
add_edge!(mg,3,5)
add_edge!(mg,5,6)
add_edge!(mg,4,6)
set_props!(mg,3,Dict(:prop1=>1,:prop2=>2))
set_props!(mg,1,Dict(:prop1=>1,:prop2=>0))
set_props!(mg,2,Dict(:prop1=>1,:prop2=>0))
set_props!(mg,4,Dict(:prop1=>0,:prop2=>2))
set_props!(mg,5,Dict(:prop1=>0,:prop2=>2))
set_props!(mg,6,Dict(:prop1=>0,:prop2=>0))
col=collect(filter_vertices(mg,:prop1,1,:prop2,2))
และฉันต้องการให้ col
ค้นหาจุดยอด 3 และไม่มีจุดอื่น
แต่ filter_vertices
จะยอมรับคุณสมบัติครั้งละหนึ่งรายการเท่านั้น จากนั้นจะทำให้มีค่าใช้จ่ายมากขึ้นในการทำลูปด้วยตัวกรอง 2 ตัว จากนั้นลองเปรียบเทียบเพื่อเรียงลำดับรายการด้วยจุดยอดที่มีคุณสมบัติทั้งสอง
เมื่อพิจารณาถึงขนาดของกราฟของฉัน ฉันต้องการหลีกเลี่ยงการกำหนดชุดนี้ด้วยการวนซ้ำหลายรอบและมีราคาแพง มีใครในพวกคุณมีไอเดียวิธีแก้ปัญหานี้ด้วยวิธีที่ง่ายและนุ่มนวลบ้างไหม?
ฉันทำสิ่งนี้เพื่อตอบคำถามของตัวเอง:
fil3=Array{Int64,1}()
fil1=filter_vertices(mg,:prop1,1)
for f in fil1
if get_prop(mg,f,:prop2)==2
push!(fil3,f)
end
end
println(fil3)
แต่บอกฉันถ้าคุณมีอะไรที่น่าสนใจกว่านี้
ขอบคุณสำหรับความช่วยเหลือของคุณ!