Spaces:
Sleeping
Sleeping
Update core/evolution/evolution.py
Browse files- core/evolution/evolution.py +18 -11
core/evolution/evolution.py
CHANGED
|
@@ -163,25 +163,32 @@ class MolecularEvolution:
|
|
| 163 |
sample_smiles = []
|
| 164 |
|
| 165 |
if survivors:
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
else:
|
| 170 |
-
#
|
| 171 |
-
|
|
|
|
| 172 |
|
| 173 |
-
|
| 174 |
|
| 175 |
-
sample_smiles = [m.smiles for m in
|
|
|
|
| 176 |
|
| 177 |
-
# remove duplicates just in case
|
| 178 |
-
sample_smiles = list(dict.fromkeys(sample_smiles))
|
| 179 |
-
|
| 180 |
self.history.append({
|
| 181 |
"generation": gen,
|
| 182 |
"smiles": sample_smiles
|
| 183 |
})
|
| 184 |
-
|
| 185 |
|
| 186 |
offspring = self._generate_offspring(survivors)
|
| 187 |
|
|
|
|
| 163 |
sample_smiles = []
|
| 164 |
|
| 165 |
if survivors:
|
| 166 |
+
is_final_gen = (gen == self.config.generations)
|
| 167 |
+
|
| 168 |
+
if is_final_gen:
|
| 169 |
+
# FINAL generation → show top 5 survivors
|
| 170 |
+
if self.config.maximize_cn:
|
| 171 |
+
sorted_survivors = sorted(survivors, key=lambda m: m.cn, reverse=True)
|
| 172 |
+
else:
|
| 173 |
+
sorted_survivors = sorted(survivors, key=lambda m: m.cn_error)
|
| 174 |
+
|
| 175 |
+
chosen = sorted_survivors[:5]
|
| 176 |
+
|
| 177 |
else:
|
| 178 |
+
# EARLY generations → show rejected molecules
|
| 179 |
+
survivor_smiles = set(m.smiles for m in survivors)
|
| 180 |
+
rejected = [m for m in population if m.smiles not in survivor_smiles]
|
| 181 |
|
| 182 |
+
chosen = rejected[:5] # show up to 5 rejected ones
|
| 183 |
|
| 184 |
+
sample_smiles = [m.smiles for m in chosen]
|
| 185 |
+
sample_smiles = list(dict.fromkeys(sample_smiles)) # remove duplicates
|
| 186 |
|
|
|
|
|
|
|
|
|
|
| 187 |
self.history.append({
|
| 188 |
"generation": gen,
|
| 189 |
"smiles": sample_smiles
|
| 190 |
})
|
| 191 |
+
|
| 192 |
|
| 193 |
offspring = self._generate_offspring(survivors)
|
| 194 |
|