2015-08-10 1 views
3

Начну с моим кодом, потому что это может быть просто очевидной проблемой для тех, кто лучше понять язык:Sage для теории графов, KeyError

g = graphs.CompleteGraph(60).complement() 
for i in range(1,180): 
    a = randint(0,59) 
    b = randint(0,59) 
    h = copy(g) 
    h.add_edge(a,b) 
    if h.is_circular_planar(): 
     g.add_edge(a,b) 

strong = copy(strong_resolve(g)) 
S = strong.vertex_cover() 
d = {'#00FF00': [], '#FF0000': []} 
for v in G.vertices(): 
    if v in S: 
     d['#FF0000'].append(v) 
    else: 
     d['#00FF00'].append(v) 
g.plot(layout="spring", vertex_colors=d).show()  
strong.plot(vertex_colors=d).show() 

new_strong = copy(strong) 
for w in new_strong.vertices(): 
    if len(new_strong.neighbors(w)) == 0:   #trying to remove 
     new_strong.delete_vertex(w)    #disconnected vertices 
new_strong.plot(vertex_colors=d).show() 

Пара заметок: strong_resolve это функция, которая принимает граф и выводит другой график. Первые два блока кода работают нормально.

Моя проблема в том, что как только я добавлю третий блок, все больше не работает. Во время игры я получил варианты этого кода, которые при добавлении вызывают ошибки, а при удалении ошибки остаются как-то. Что происходит сейчас в том, что цикл, кажется, не идти до его конца, и только тогда это даст следующее сообщение об ошибке:

Traceback (most recent call last):  if h.is_circular_planar(): 
    File "", line 1, in <module> 

    File "/tmp/tmprzreop/___code___.py", line 30, in <module> 
    exec compile(u'new_strong.plot(vertex_colors=d).show() 
    File "", line 1, in <module> 

    File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/misc/decorators.py", line 550, in wrapper 
    return func(*args, **options) 
    File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 15706, in plot 
    return self.graphplot(**options).plot() 
    File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 15407, in graphplot 
    return GraphPlot(graph=self, options=options) 
    File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 247, in __init__ 
    self.set_vertices() 
    File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 399, in set_vertices 
    pos += [self._pos[j] for j in vertex_colors[i]] 
KeyError: 0 

это может варьироваться в этом KeyError: 0 является иногда 1 или 2 в зависимости от какого-то неизвестного фактора.

Я заранее извиняюсь за свой ужасный код и признаю, что я действительно понятия не имею, что я делаю, но я был бы очень признателен, если бы кто-то помог мне здесь.

ответ

1

Я понял! Оказывается, ошибка возникла из d, имеющего записи, которые не имели смысла в new_strong, а именно те, которые уже были удалены. Это вызвало ключевую ошибку, когда plot() попытался покрасить вершины в соответствии с d.