34 lines
1.9 KiB
Bash
Executable File
34 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# Вечная эволюция на GPU: бесконечный конвейер циклов. Каждый цикл — свежая
|
||
# случайная популяция («революция» против застревания в локальном оптимуме),
|
||
# всё пишется в одну базу, дашборд показывает лучший за всё время.
|
||
# Развёртывание: см. deploy/README.md; systemd-юнит: gausse-evolve.service.
|
||
cd /home/user/gausse
|
||
source .venv/bin/activate
|
||
LOG=results/gausse.sqlite3.log
|
||
cycle=1
|
||
while true; do
|
||
best=$(python3 - <<'PY'
|
||
import sqlite3
|
||
try:
|
||
c = sqlite3.connect("results/gausse.sqlite3")
|
||
# НЕ max(): он сканирует всю базу (гигабайты); частичный индекс отдаёт мгновенно
|
||
row = c.execute("select efficiency from runs indexed by idx_runs_feas_eff "
|
||
"where feasible=1 order by efficiency desc limit 1").fetchone()
|
||
print(f"{row[0]*100:.2f}%" if row and row[0] is not None else "пока нет")
|
||
except Exception:
|
||
print("пока нет")
|
||
PY
|
||
)
|
||
echo "$(date -Is) ═════ ЦИКЛ #$cycle стартует (конвейер бесконечный; лучший КПД за всё время: $best) ═════" >> "$LOG"
|
||
python3 -c "from pathlib import Path
|
||
from gausse.optim.evolutionary import run_evolution
|
||
try:
|
||
run_evolution(Path('results/gausse.sqlite3'), n_generations=60, population_size=4000, seed=None, polish=True, use_gpu=True, islands=8)
|
||
except KeyboardInterrupt:
|
||
pass # штатная остановка сервиса: база уже дописана в finally"
|
||
echo "$(date -Is) ═════ ЦИКЛ #$cycle завершён — это НЕ остановка: через 3с стартует цикл #$((cycle+1)) со свежей случайной популяцией ═════" >> "$LOG"
|
||
cycle=$((cycle+1))
|
||
sleep 3
|
||
done
|