#!/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) except KeyboardInterrupt: pass # штатная остановка сервиса: база уже дописана в finally" echo "$(date -Is) ═════ ЦИКЛ #$cycle завершён — это НЕ остановка: через 3с стартует цикл #$((cycle+1)) со свежей случайной популяцией ═════" >> "$LOG" cycle=$((cycle+1)) sleep 3 done