2016-04-06 24 views
0

Ben yöntemini igraph piton kütüphanesinin write_dimacs kullanarak sorunları var: Ben hata alıyorum kullanmaya çalıştığımda, anlamıyorum bazı nedenlerden dolayıSorunları

: KeyError: 'Attribute does not exist' (aşağıdaki çıktıya bakın). İşte

sistemimde hatayı yeniden üreten bir örnek kod parçacığını olan (mac os x 10.10.5, piton 3.5.1, piton-iGRAPH-0.7.1.post6): Ben olsun

from igraph import * 

g = Graph.Read_Edgelist("graph3.txt") 

print(g) 

# This works fine 
g.write_adjacency("graph4.txt") 

# This gives the error 
g.write_dimacs("graph5.txt") 

aynı hata açıkça gibi yönteme diğer argümanlar geçmesi halinde de: g.write_dimacs("graph5.txt", 1)

Çıkış:


IGRAPH D--- 15 22 -- 
+ edges: 
1->2 1->8 1->11 1->14 2->3 2->6 3->4 4->5 5->4 5->1 6->4 6->7 7->4 8->9 8->11 
8->12 9->10 10->9 10->5 11->12 12->13 13->10 
Traceback (most recent call last): 
    File "test.py", line 10, in <module> 
    g.write_dimacs("graph5.txt") 
    File "build/bdist.macosx-10.10-intel/egg/igraph/__init__.py", line 1676, in write_dimacs 
KeyError: 'Attribute does not exist' 

Neler olup bittiğini bilen var mı?

Şimdiden teşekkürler.

+0

Bize orjinal DIMACS dosyasını göster. Igraph'ın çıkışından yola çıkarak, orijinal DIMACS dosyası, sıfır noktasının izole bir köşe noktası olacak şekilde okundu. –

+0

@ Tamás Vertex sıfır, orijinal DIMACS dosyasında mevcut değil çünkü biçim, ilk etiketin 1 olması gerektiğini belirtir. Giriş dosyası, yazılı ile aynıdır ancak köşe etiketleri 1'den başlar: [(1, 2), (1 , 8), (1, 11), (1, 14) ...] –

+0

Yine de, igraph'ın ne yaptığını kontrol etmek için orijinal dosyanızı görmem gerekiyor - aksi halde yardımcı olamıyorum. El ile oluşturduğum rastgele bir DIMACS dosyası ile çalışmak işe yarıyor gibi görünüyor. –

cevap

1

write_dimacs yöntemi, DIMACS maximum flow problem format numaralı belgede igraph grafiklerini yazmak içindir.

  • maksimum akış sorununun source köşe belirtmek
  • kenarları

kaynak kapasitelerinin belirtmek maksimum akış problemi

  • ait target köşe belirtin: Bu biçim gerektirir ve hedef noktalar, grafiğin source ve target özniteliklerinden tanımlanır. Kapasitelerin capacity kenar özniteliğinden geldiği kabul edilir. igraph'ın belgelerinde bir hata var: belgeler, capacity özniteliğinin eksik olması durumunda, tüm kapasitelerin 1'e eşit olduğunu varsayacaktır, ancak durum böyle değil - kapasiteleri açıkça iletmeniz veya adı belirtmeniz gerekir kenar kapasitelerini belirten bir kenar özniteliği. aşağıdaki gibi durumda

    , en kolay yolu almak için işe yarıyor: Ben sadece kaynak ve hedef olarak iki keyfi köşe tanımladıktan

    g.write_dimacs("graph5.txt", source=0, target=1, capacity=[1]*g.ecount()) 
    

    .

  • +0

    Çözüm için teşekkürler, dokümanlar ve 'kapasiteyi' ayarlamaya çalışmadı.Yazılı dosyadaki etiketlerle hala bazı sorunlar yaşıyorum (DIMACS etiketlerinin 1'den başlaması gerektiğini bildiğim kadarıyla) ve sorumu buna göre güncelledim. Başka bir anlayışınız varsa takdir edeceğim ama doğru cevap verdiğinizi düşünüyorum, tekrar teşekkürler. –