from random import uniform #48 embedding for G48 a = -0.05 b = 0.05 c = -10.0 d = 10.0 edges_G160=[(1, 2), (1, 3), (1, 4), (1, 8), (2, 3), (2, 5), (2, 6), (2, 8), (3, 4), (3, 5), (3, 7),(4, 7), (4, 8), (5, 6), (5, 7), (6, 7), (6, 8), (7, 8)] #try: v3 = [0, 0, 0] v1 = [0, 5.73225265711452, 0] v2 = [0, 0.148291560665423, 3.30491899417522] v5 = [-3.1508917850189, 0.846961251730797, 0.259525376012296] v7 = [-2.49285516161801, 1.67204766459525, -0.558220040757827] v4 = [-2.59381676560345, 1.54400553897266, -0.398999543683517] v8 = [-1.69450165498139, 1.01237857741641, -0.346180158496239] v6 = [-3.1508917850189+uniform(a,b), 0.846961251730797+uniform(a,b), 0.259525376012296+uniform(a,b)] lengths = getEdgeLengthsByEmbedding('edges', [v1, v2, v3, v4, v5, v6, v7, v8], edges=edges_G160) alg = AlgRealEmbeddings('edges', name='G160', edges=edges_G160, num_sols=160, allowedNumberOfMissing=4, moreSamplingSubgraphs=False) lengths_final =alg.findMoreEmbeddings(lengths) G = GraphEmbedding(lengths_final, 'edges', num_sols=160) print 'There are ', len(G.findEmbeddings()['real']), 'real embeddings with the following edge lengths:' print lengths_final #except: # pass # ---------------------------------
] names = [ 'G128a', 'G160', 'G128b', 'G112', 'G96a', 'G96b', 'G96c', 'G96d', 'G80a', 'G80b', 'G80c', 'G128c', 'G96', 'G96e', 'G96f', 'G80d', 'G96g', 'G96h' ] for N in range(2, len(graphs)): lengths = getEdgeLengthsByEmbedding('edges', [v1, v2, v3, v4, v5, v6, v7, v8], edges=graphs[N]) print graphs[N] start = time.time() # we run the sampling method based on coupler curves alg = AlgRealEmbeddings('edges', name=names[N], edges=graphs[N], num_sols=numbersOfComplexSolutions[N], allowedNumberOfMissing=10) lengths_final = alg.findMoreEmbeddings(lengths) print '\n\nSampling time: ', time.time() - start print '\n\nChecking and summary ' G = GraphEmbedding(lengths_final, 'edges', num_sols=numbersOfComplexSolutions[N]) print 'There are ', len( G.findEmbeddings() ['real']), 'real embeddings with the following edge lengths:' print lengths_final
8.136067056377305, 8.143199959343708, 8.15033286231011 ] ] } # new_lengths = copy.copy(lengths) for e in lengths: # print e, lengths[e] m, Ls = n_L[e] # print m, Ls if Ls and m == 128: new_lengths[e] = sum(Ls) / float(len(Ls)) # if abs(min(Ls)-lengths[e])<abs(max(Ls)-lengths[e]): # new_lengths[e] = min(Ls) # else: # new_lengths[e] = max(Ls) G = GraphEmbedding(new_lengths, 'Max8vertices') sols = G.findEmbeddings() print 'Embeddings after resampling:' print len(sols['real']) print new_lengths alg = AlgRealEmbeddings('Max8vertices', num_phi=32, num_theta=32, factor_second=4, name='8vert_Resampling_of_128') alg.findMoreEmbeddings(new_lengths)
from graphEmbeddings3D.algRealEmbeddings import AlgRealEmbeddings from graphEmbeddings3D.graphEmbedding import getEdgeLengthsByEmbedding, GraphEmbedding from random import uniform a = -0.05 b = 0.05 L = [ {(1, 2): 9.032862424886133, (2, 7): 13.72608160429762, (4, 7): 10.53572330314948, (2, 6): 8.8124136360619918, (6, 7): 10.524846978527732, (5, 6): 0.5667571679193731, (5, 7): 10.53627365999783, (1, 4): 2.003436460984393, (1, 5): 2.00289249524296, (1, 3): 3.325513914287539, (1, 6): 1.9396324146809476, (4, 5): 1.001530148504854, (3, 7): 10.869692323177114, (3, 4): 3.1793342372525983, (2, 3): 9.540642897345043}, {(1, 2): 8.408431978862838, (2, 7): 13.323993408297303, (4, 7): 10.53572330314948, (2, 6): 8.218437267272142, (6, 7): 10.524661464352766, (5, 6): 0.5295354619564819, (5, 7): 10.53627365999783, (1, 4): 2.003436460984393, (1, 5): 2.00289249524296, (1, 3): 3.325513914287539, (1, 6): 1.9387736578515649, (4, 5): 1.001530148504854, (3, 7): 10.869692323177114, (3, 4): 3.1793342372525983, (2, 3): 8.93922391029478}, {(1, 2): 4.386290254987836, (2, 7): 11.232184203672034, (4, 7): 10.53572330314948, (2, 6): 3.9339443719412293, (6, 7): 10.524651892285146, (5, 6): 0.5264150074538269, (5, 7): 10.53627365999783, (1, 4): 2.003436460984393, (1, 5): 2.00289249524296, (1, 3): 7.313166095425311, (1, 6): 1.9387341135890943, (4, 5): 1.001530148504854, (3, 7): 12.677349678708367, (3, 4): 7.531555561165634, (2, 3): 8.669332474798372}, {(1, 2): 4.386290254987835, (2, 7): 11.232184203672034, (4, 7): 10.53572330314948, (2, 6): 3.96355207516054, (6, 7): 10.524670259119938, (5, 6): 0.5321679719883625, (5, 7): 10.53627365999783, (1, 4): 2.003436460984393, (1, 5): 2.00289249524296, (1, 3): 7.58982287777062, (1, 6): 1.9388109236436741, (4, 5): 1.001530148504854, (3, 7): 12.839296476824694, (3, 4): 7.818147937350013, (2, 3): 8.972719070171435}, {(1, 2): 4.386290254987836, (2, 7): 11.232184203672034, (4, 7): 10.53572330314948, (2, 6): 3.9339443719412293, (6, 7): 10.524651892285146, (5, 6): 0.5264150074538269, (5, 7): 10.53627365999783, (1, 4): 2.003436460984393, (1, 5): 2.00289249524296, (1, 3): 7.589822877770622, (1, 6): 1.9387341135890943, (4, 5): 1.001530148504854, (3, 7): 12.839296476824696, (3, 4): 7.818147937350017, (2, 3): 8.972719070171436}, {(1, 2): 3.6547267239838073, (2, 7): 10.931902209424029, (4, 7): 10.528964771703047, (2, 6): 12.36535326089277, (6, 7): 6.614718312956418, (5, 6): 15.12587430560531, (5, 7): 13.990265768289897, (1, 4): 1.9423383670562493, (1, 5): 9.822922401885547, (1, 3): 1.9354608517198846, (1, 6): 11.884171167050836, (4, 5): 9.723833100136652, (3, 7): 10.524273284504055, (3, 4): 0.5383946923429196, (2, 3): 3.283167602028824}, {(1, 2): 4.1414653501173975, (2, 7): 11.139850811829968, (4, 7): 10.523551385333088, (2, 6): 4.1677512911570815, (6, 7): 10.542828736351707, (5, 6): 1.0309584430720742, (5, 7): 10.533375487651346, (1, 4): 1.9363529242001118, (1, 5): 1.9873340498152834, (1, 3): 5.959257111560759, (1, 6): 2.0323899508242214, (4, 5): 0.4412801229952831, (3, 7): 11.949398151358958, (3, 4): 5.6557115598418122, (2, 3): 7.295330049669027}, {(1, 2): 6.274873914397456, (2, 7): 12.093170928755793, (4, 7): 10.52881316000657, (2, 6): 10.479941653322763, (6, 7): 8.11321631042846, (5, 6): 9.459324566316262, (5, 7): 10.73159467196586, (1, 4): 1.9761239449935557, (1, 5): 2.8483166740669206, (1, 3): 1.9564840951854308, (1, 6): 9.4046159048512159, (4, 5): 2.313950594269001, (3, 7): 10.525064001461296, (3, 4): 0.47038007668728976, (2, 3): 5.952813550679546}, {(1, 2): 3.2154982220265791, (2, 7): 1.4364348191352576, (4, 7): 17.879677295730822, (2, 6): 1.0237800945583886, (6, 7): 1.0148514465978793, (5, 6): 0.09495461781463814, (5, 7): 1.012349685743454, (1, 4): 18.137675008130483, (1, 5): 3.0323381652662267, (1, 3): 9.97279438841746, (1, 6): 3.0325698054329457, (4, 5): 17.849062036359275, (3, 7): 9.215048223037243, (3, 4): 19.765613007713743, (2, 3): 8.476438875510395}, {(1, 2): 5.7322526571145165, (2, 7): 5.026767140924392, (4, 7): 1.5859742422378464, (2, 6): 4.942519597534114, (6, 7): 1.0460328780197365, (5, 6): 0.22790172904533793, (5, 7): 1.0571151960916287, (1, 4): 3.273043816331718, (1, 5): 3.0531426208724093, (1, 3): 3.308244239022385, (1, 6): 3.044838116183432, (4, 5): 1.3350982559642988, (3, 7): 4.116856477203278, (3, 4): 4.437418243490294, (2, 3): 6.488691014736114} ] for lengths_7 in L: G = GraphEmbedding(lengths_7, 'Max7vertices') v1, v2, v3, v4, v5, v6, v7 = G.getEmbedding() v8 = [v6[0] + uniform(a, b), v6[1] + uniform(a, b), v6[2] + uniform(a, b)] lengths = getEdgeLengthsByEmbedding('Max8vertices', [v1, v2, v3, v4, v5, v6, v7, v8]) alg = AlgRealEmbeddings('Max8vertices', name='8vert_6and8close_fromG48') alg.findMoreEmbeddings(lengths)
v2 = [uniform(a, b), uniform(a, b), uniform(a, b)] v3 = [uniform(a, b), uniform(a, b), uniform(a, b)] v4 = [uniform(a, b), uniform(a, b), uniform(a, b)] v5 = [uniform(a, b), uniform(a, b), uniform(a, b)] v6 = [uniform(a, b), uniform(a, b), uniform(a, b)] # edge lengths are given as the distances in the embedding lengths = getEdgeLengthsByEmbedding('Max6vertices', [v1, v2, v3, v4, v5, v6]) # or the following edge lengths yields ones with 16 real embeddings: #lengths = {(1, 3): 0.5308353556228526, (5, 6): 1.8056034169357076, (2, 6): 2.4456570316770256, (2, 3): 0.8512597859002053, # (3, 5): 1.2853151143150572, (1, 2): 1.1757548283222, (4, 6): 0.9879010951471968, (1, 5): 0.7810003670625068, # (4, 5): 1.6175092476119708, (1, 6): 1.4488010671291325, (3, 4): 1.1784501009786457, (2, 4): 1.9763357382306461} start = time.time() # we run the sampling method based on coupler curves alg = AlgRealEmbeddings('Max6vertices', num_phi=5, num_theta=5, name='random6vert') lengths_final = alg.findMoreEmbeddings(lengths, allowed_repetition=2) print '\n\nSampling time: ', time.time() - start print '\n\nChecking and summary ' G = GraphEmbedding(lengths_final, 'Max6vertices') print 'There are ', len( G.findEmbeddings()['real'] ), 'real embeddings of the cyclohexane with the following edge lengths:' print lengths_final
(1, 3): 5.75, (5, 6): 7.9, (1, 6): 8.48, (3, 7): 5.91, (2, 5): 7.15, (3, 5): 5.09, (1, 2): 4.36, (4, 6): 8.78, (5, 7): 10.22, (3, 6): 7.06, (1, 7): 3.77, (2, 3): 3.81, (3, 4): 3.23, (2, 4): 6.05 } G = GraphEmbedding(lengths_G16a, '7vert16a') print 'There are ', len( G.findEmbeddings(tolerance=1.0e-50) ['real']), 'real embeddings of G16a with the following edge lengths:' print lengths_G16a, '\n' print 'Graph G16b' lengths_G16b = { (1, 2): 4.62, (4, 7): 4.46, (2, 6): 7.47, (4, 5): 7.72, (1, 4): 6.51, (1, 3): 3.53, (2, 3): 7.69, (3, 7): 5.76,
from graphEmbeddings3D.algRealEmbeddings import AlgRealEmbeddings from graphEmbeddings3D.graphEmbedding import getEdgeLengthsByEmbedding, GraphEmbedding from random import uniform a = -5.0 b = 5.0 for i in range(0, 100): v1 = [uniform(a, b), uniform(a, b), uniform(a, b)] v2 = [uniform(a, b), uniform(a, b), uniform(a, b)] v3 = [uniform(a, b), uniform(a, b), uniform(a, b)] v4 = [uniform(a, b), uniform(a, b), uniform(a, b)] v5 = [uniform(a, b), uniform(a, b), uniform(a, b)] v6 = [uniform(a, b), uniform(a, b), uniform(a, b)] v7 = [uniform(a, b), uniform(a, b), uniform(a, b)] lengths = getEdgeLengthsByEmbedding('7vert16a', [v1, v2, v3, v4, v5, v6, v7]) G = GraphEmbedding(lengths, '7vert16a') r = len(G.findEmbeddings()['real']) print r if r == 16: alg = AlgRealEmbeddings('7vert16a', name='7vert16a_random') alg.findMoreEmbeddings(lengths) break #one of the obtained edge lengths: #lengths = {(4, 7): 7.194704049075016, (1, 3): 5.747980801274709, (5, 6): 7.9040999968533, (1, 6): 8.475244632380354, # (3, 7): 5.906043147314687, (2, 5): 7.154928516304775, (3, 5): 5.085705612775616, (1, 2): 4.358218168288518, # (4, 6): 8.782535437545246, (5, 7): 10.216775546892137, (3, 6): 7.058175756732775, (1, 7): 3.771401840715499, # (2, 3): 3.80939380782979, (3, 4): 3.227767798526635, (2, 4): 6.052913431118577}
(2, 8): 0.847, (1, 4): 6.611, (1, 3): 1.568, (1, 6): 1.994, (3, 7): 10.447, (5, 8): 4.279, (2, 7): 10.536, (6, 8): 0.398, (1, 5): 4.402, (3, 4): 6.494, (5, 7): 11.239, (5, 6): 4.321, (2, 3): 1.426, (7, 8): 10.474 } G = GraphEmbedding(lengths_G160, 'Max8vertices') G.findEmbeddings() edges = [(1, 2), (2, 7), (4, 7), (2, 6), (6, 8), (4, 5), (2, 8), (5, 7), (7, 8), (1, 4), (1, 5), (1, 3), (1, 6), (5, 6), (3, 7), (3, 4), (2, 3), (5, 8)] for _ in range(0, 1000): for e in edges: lengths_G160[e] = 1 + 0.01 * random() G.setLengths(lengths_G160) real_sol = G.findEmbeddings(tolerance=1.0e-50)['real'] print len(real_sol) if len(real_sol) >= 132: with open('stoch_res.txt', 'a') as f: f.write(str(len(real_sol)) + '\n') f.write(str(lengths_G160) + '\n\n')
''' This script verifies that the 8-vertex graph G128, resp. G160, has edge lengths such that 128, resp. 132, embeddings are real. The edge lengths were found by the sampling method. ''' if __name__ == '__main__': print __doc__ from graphEmbeddings3D.graphEmbedding import GraphEmbedding # print 'Graph G128' # lengths_G128 = {(2, 7): 9.2728, (1, 2): 8.7093, (1, 3): 10.3433, (6, 7): 1.5449, (6, 8): 10.5532, (4, 8): 10.5237, # (5, 6): 0.7536, (2, 8): 13.5773, (3, 4): 10.1636, (1, 4): 1.9373, (3, 8): 14.6173, (1, 5): 1.9379, # (1, 6): 2.0691, (1, 7): 2.1185, (4, 5): 0.0634, (2, 3): 13.5267, (7, 8): 10.5509, (5, 8): 10.5237} # G = GraphEmbedding(lengths_G128, 'Ring8vertices') # print 'There are ', len(G.findEmbeddings(tolerance=1.0e-50)['real']), 'real embeddings of G128 with the following edge lengths:' # print lengths_G128, '\n' print 'Graph G160' lengths_G160 = {(1, 2): 1.999, (4, 7): 11.993, (2, 6): 0.879, (4, 5): 7.278, (2, 8): 0.847, (1, 4):6.611, (1, 3): 1.568, (1, 6): 1.994, (3, 7): 10.447, (5, 8):4.279, (2, 7): 10.536, (6, 8):0.398, (1, 5): 4.402, (3, 4): 6.494, (5, 7): 11.239, (5, 6): 4.321, (2, 3): 1.426, (7, 8): 10.474} G = GraphEmbedding(lengths_G160, 'Max8vertices') print 'There are ', len(G.findEmbeddings(tolerance=1.0e-50)['real']), 'real embeddings of G160 with the following edge lengths:' print lengths_G160, '\n'