• Keine Ergebnisse gefunden

4. Methoden 35

4.3. Generierung von Konformationen

4.3.6. TFD- und RMSD-Clustering

Zur Reduzierung der Menge der generierten Konformationen wird ein ein-facher Cluster-Algorithmus (Algorithmus 4) angewendet, bei dem entweder TFD- (TFD-Clustering) oder RMSD-Werte (RMSD-Clustering) als ¨ Ahnlich-keitsmaß benutzt werden. Das Ergebnis des Clusterings ist dabei nicht eine Menge von Clustern, sondern jeweils eine repr¨asentative Konformati-on pro Cluster. Der Cluster-Algorithmus nutzt dabei die nach Bewertung sortierte KQ aus und startet mit der am besten bewerteten Konformation.

4. Methoden

Stop: Gebe Konformationen aus Start: Lese Molekül ein

Füge Wurzelknoten in EQ ein Initialisiere leere KQ

Setze Zähler für Erweiterungen #exp auf 0 Setze Zähler für Konformationen #konf auf 0

Berechne Torsionswinkellisten Berechne maximale Anzahl an Konformationen

Berechne Torsionswinkellisten erneut Weise Torsionssignaturen zu Generiere Ringkonformationen

Berechne Torsion-Fingerprint Erstelle Komponentenbaum Kanonisiere Atome und Bindungen

Extrahiere beste Teilkonformation aus EQ und baue nächste Komponente an

Zähle #sol und #exp hoch Füge fertige Konformation in KQ ein

Wende Cluster-Algorithmus auf KQ an

Optimiere Konformationen mit überlappenden Atomen

#konf > #Konformationen oder #exp > 100.000

EQ.Empty() Ja

Nein

Ja

Nein

Na chv er ar bei tu ng A uf bau V or ve rar bei tu ng

Wende Cluster-Algorithmus erneut auf KQ an

Abbildung 4.9.: ¨Ubersicht der einzelnen Phasen der Konformationsgenerierung. EQ:

Priorit¨atswarteschlange mit erweiterbaren Konformationsbaum-knoten. KQ: Priorit¨atswarteschlange mit vollst¨andigen Konforma-tionen

60

4.3. Generierung von Konformationen

Algorithmus 1Uberlapptest¨ Input: Molek ¨ul m

Output: Uberlapp¨

1:

2: Uberlapp¨ ←0

3: for allAtompaare i, j von mdo

4: ifi ist Wasserstoffatomorj ist Wasserstoffatomthen

5: continue

6: else ifi und j geh ¨oren zum selben Ringsystemthen

7: continue

8: else ifzwischen i und j liegen weniger als 3 Bindungen then

9: continue

10: else

11: ki ←Koordinaten von i

12: kj ←Koordinaten von j

13: ri ←VdW-Radius von i

14: rj ←VdW-Radius von j

15: d1 =(Distanz(ki,kj))2

16: d2 = 0.5(ri+rj)2

17: ifd1>d2then

18: Uberlapp = ¨¨ Uberlapp + 10(d2/d1)

19: end if

20: end if

21: end for

22: return Uberlapp¨

Von dieser KonformationKiwird nacheinander der TFD- bzw. RMSD-Wert zu allen anderen Konformationen Kj (i+1 ≤ j ≤ n, wobei n die Anzahl der Konformationen angibt) berechnet. Wenn der TFD- bzw. RMSD-Wert unter einem vorgegebenen Schwellenwert liegt, wird die KonformationKj gel ¨oscht. Die KonformationKi wird als Repr¨asentantdes Clusters behalten.

Dann wird mit der am zweitbesten bewerteten, bisher nicht gel ¨oschten Kon-formation weitergemacht und TFD- bzw. RMSD-Werte nacheinander zu allen noch verbliebenen Konformationen berechnet. Auch hier werden wie-der die Konformationen gel ¨oscht, bei denen wie-der TFD- bzw. RMSD-Wert den vorgegebenen Schwellenwert unterschreitet. Durch die Nutzung der nach Bewertung sortierten KQ wird sichergestellt, dass immer jeweils die besser bewertete Konformation behalten und die schlechter bewertete Konformati-on gel ¨oscht wird. Die Laufzeitkomplexit¨at des TFD- bzw. RMSD-Clustering liegt inO(n2). Haben alle Konformationen einen unter dem Schwellenwert

4. Methoden

Algorithmus 2 Erweiterung von Konformationsbaumknoten

Input: zu erweiternder KBK (ek), Priorit¨atswarteschlange mit zu erweiternden KBK (EQ), n¨achste anzubauende Komponente (nk)

1:

2: if notnk.GetAngleList()then

3: ifnk.GetRingConfs()then starre Bindung, flexibles Ringsystem 4: for allnk.GetRingConfs()do

5: kbk.init(ek) neuer KBK mit Daten von ek 6: kbk.GetComponents().Push(nk)

7: Berechne neue Koordinaten und mache ¨Uberlapptest 8: ifkein ¨UberlapporUberlapp optimierbar¨ then 9: kbk.ScoreBewerte neue Teilkonformation

10: EQ.Enqueue(kbk)

11: end if

12: end for

13: else starre Bindung, kein oder starres Ringsystem 14: kbk.init(ek)

15: kbk.GetComponents().Push(nk) 16: Uberlapptest¨

17: ifkein ¨UberlapporUberlapp optimierbar¨ then 18: kbk.ScoreBewerte neue Teilkonformation

19: EQ.Enqueue(kbk)

20: end if

21: end if 22: else

23: ifnk.GetRingConfs()then rotierbare Bindung, flexibles Ringsystem 24: for allnk.GetRingConfs()do

25: for allGetAngleList()do

26: kbk.init(ek)

27: kbk.GetComponents().Push(nk)

28: Berechne neue Koordinaten und mache ¨Uberlapptest 29: ifkein ¨UberlapporUberlapp optimierbar¨ then 30: kbk.ScoreBewerte neue Teilkonformation

31: EQ.Enqueue(kbk)

32: end if

33: end for

34: end for

35: else rotierbare Bindung, kein oder starres Ringsystem 36: for allGetAngleList()do

37: kbk.init(ek)

38: kbk.GetComponents().Push(nk)

39: Berechne neue Koordinaten und mache ¨Uberlapptest 40: ifkein ¨UberlapporUberlapp optimierbar¨ then 41: kbk.ScoreBewerte neue Teilkonformation

42: EQ.Enqueue(kbk)

43: end if

44: end for

45: end if 46: end if

62

4.3. Generierung von Konformationen

Algorithmus 3Generierung von Konformationen

Input: Gewurzelter Komponentenbaum (KompB) eines Molek ¨uls Input: Maximale Anzahl an Konformationen (k)

Output: Eine Menge an Konformationen (KQ)

1:

2: KQ.Init() →Priorit¨atswarteseschlange f ¨ur fertige Konformationen

3: EQ.Init() → Priorit¨atswarteseschlange f ¨ur zu erweiternde KBK

4:

5: kbk.Init() →KBK-Wurzel

6: kbk.Komponenten.Push(KompB-Wurzel)

7: EQ.Enqueue(kbk)

8:

9: while notEQ.Empty()do

10: if>100.000 ek erzeugt then

11: break

12: end if

13: ifAnzahl Elemente in KQ ≥kthen

14: fori =1 toKQ.Size() -k do

15: L ¨osche KQ.back()

16: end for

17: ifKQ.back().Score>EQ.Front().Score then

18: break

19: end if

20: end if

21: ek←EQ.Front() →zu erweiternder KBK

22: EQ.Dequeue()

23: lk←ek.GetComponents().Top() →zuletzt angebaute Komponente

24: nk ←lk.GetNext() →n¨achste anzubauende Komponente

25: if notnk then

26: KQ.Enqueue(ek) →fertige Konformation

27:

28: else

29: erweitereKnoten(ek, EQ, nk)

30: end if

31: end while

32: return KQ

4. Methoden

liegenden TFD- bzw RMSD-Wert zur ersten Konformation, ben ¨otigt der Algorithmus n−1 TFD- bzw. RMSD-Berechnungen. Im schlechtesten Fall, wenn die TFD- bzw. RMSD-Werte zwischen allen Konformationen ¨uber dem Schwellenwert liegen, werdenn2TFD- bzw. RMSD-Berechnungen ben ¨otigt.

Der Algorithmus f ¨ur das RMSD-Clustering funktioniert analog, wobei als Eingabe ein RMSD-Schwellenwert benutzt wird und in Zeile 19 nicht der TFD-Wert sondern der RMSD-Wert berechnet wird. Der hier beschriebe-ne Cluster-Algorithmus ist eibeschriebe-ne modifizierte Version des von Kayser in seiner Diplomarbeit beschriebenen Iterative in-place clustering[103]. Hierin vergleicht Kayser das iterative Clustering mit dem hierarchisch agglome-rativen Complete-Linkage-Verfahren und kommt zu dem Ergebnis, dass das iterative Clustering dem Complete-Linkage-Clustering vorzuziehen ist, das iterative Clustering aber die Nachteile hat, dass die Anzahl der Cluster nicht kontrolliert werden kann und dass die Sortierung der Konformationen w¨ahrend des Clusterings verloren geht. Die hier beschriebene modifizier-te Version beh¨alt zwar die Reihenfolge der Konformationen w¨ahrend des Clusterings bei, braucht daf ¨ur aber zwei zus¨atzliche Iterationen ¨uber die Konformationen, eine am Anfang, in dem die Queue in ein Array umge-wandelt wird, und eine am Ende, in dem das Array wieder in die Queue

¨uberf ¨uhrt wird.

Um das TFD-Clustering zu beschleunigen, wird der TF f ¨ur jede Teilkonfor-mation w¨ahrend des Aufbaus angepasst. Dazu wird am Anfang der TF f ¨ur das Eingabe-Molek ¨ul berechnet und dann wird bei jedem Anbau-Schritt nur der TF-Wert f ¨ur den entsprechenden neuen Torsionswinkel bzw die neue Ringkonformation neu berechnet und in dem, vom Elternknoten kopierten, TF ausgetauscht.