-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrodar_loop.py
More file actions
88 lines (73 loc) · 4.14 KB
/
Copy pathrodar_loop.py
File metadata and controls
88 lines (73 loc) · 4.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import numpy as np
import random
import time
from motor_simulacao import rodar_modelo
import uuid
# ==============================================================================
# CONFIGURAÇÃO GERAL
# ==============================================================================
NUM_SIMULACOES = 10000 # Quantas cenários diferentes você quer gerar?
PLOTAR_GRAFICO = False # Deixe False para rodar rápido (sem abrir janelas)
# ==============================================================================
print(f"--- INICIANDO GERAÇÃO DE DATASET ({NUM_SIMULACOES} Amostras) ---")
start_time = time.time()
for i in range(NUM_SIMULACOES):
# --------------------------------------------------------------------------
# 1. SORTEIO DO TIPO DE SOLO (CONDUTIVIDADE HIDRÁULICA - HK)
# --------------------------------------------------------------------------
# Usamos escala logarítmica para cobrir todas as classes de solo.
# Expoente -5 (0.00001) = Argila Muito Compactada / Rochas Sãs
# Expoente -3 (0.001) = Silte / Argila Arenosa
# Expoente -1 (0.1) = Areia Fina
# Expoente 1 (10.0) = Areia Grossa / Cascalho
expoente_hk = np.random.uniform(-4, -1)
hk_aleatorio = 10 ** expoente_hk
# --------------------------------------------------------------------------
# 2. SORTEIO DA VAZÃO DO VAZAMENTO (SOURCE FLUX)
# --------------------------------------------------------------------------
# Valores em m³/dia.
# 0.01 - 0.10 = Gotejamento, vazamento pequeno em emenda de geomembrana.
# 0.10 - 1.00 = Ruptura média, rasgo na manta.
# 1.00 - 5.00 = Falha catastrófica, talude colapsado ou "rio" de chorume.
vazao_aleatoria = np.random.uniform(0.01, 1.5)
# --------------------------------------------------------------------------
# 3. SORTEIO DA POSIÇÃO DO VAZAMENTO (LEAK LOCATION)
# --------------------------------------------------------------------------
# O grid tem 50 colunas.
# Coluna 1-15 = Vazamento no topo do aterro (perto da nascente)
# Coluna 15-30 = Vazamento no meio do talude
# Coluna 30-45 = Vazamento no pé do aterro (perto do rio/saída)
col_aleatoria = np.random.randint(2, 40) # Evitamos as bordas extremas (0 e 49)
loc_aleatoria = (0, 1, col_aleatoria) # (Camada 0, Linha 1, Coluna Sorteada)
# --------------------------------------------------------------------------
# 4. SORTEIO DA CARGA HIDRÁULICA (GRADIENTE/PRESSÃO)
# --------------------------------------------------------------------------
# O lado direito (saída) fixamos em 10m. O lado esquerdo varia.
# Head 12m (Delta 2m) = Terreno quase plano (Pantanal), fluxo lento.
# Head 20m (Delta 10m) = Terreno suave ondulado.
# Head 40m (Delta 30m) = Encosta íngreme ou Aterro muito alto (pressão forte).
head_end_fixo = 10.0
head_start_aleatorio = np.random.uniform(12.0, 40.0)
# --------------------------------------------------------------------------
# 5. EXECUÇÃO DO MODELO
# --------------------------------------------------------------------------
timestamp = time.strftime("%Y%m%d_%H%M%S")
id_unico = str(uuid.uuid4())[:8]
nome_sim = f"treino_{timestamp}_{id_unico}"
print(f"[{i+1}/{NUM_SIMULACOES}] Rodando: HK={hk_aleatorio:.5f} | Q={vazao_aleatoria:.2f} | Loc=Col_{25}")
# Chama o motor que você já configurou (ele salva o CSV automaticamente)
rodar_modelo(
nome_simulacao=nome_sim,
hk= hk_aleatorio,
vazao_fonte=vazao_aleatoria,
loc_fonte= (0, 1, 25) , #loc_aleatoria,
head_start= 12 , #head_start_aleatorio,
head_end=head_end_fixo,
porosidade=0.3, # Fixamos porosidade por enquanto (pode variar 0.2-0.4 se quiser)
conc_fonte= np.random.uniform(8000, 25000), # Chorume "padrão" (mg/L)
anos= np.random.uniform(0.5, 3.0), # Tempo de simulação entre 0.5 e 3 anos
plotar=PLOTAR_GRAFICO
)
elapsed = time.time() - start_time
print(f"\n--- PROCESSO CONCLUÍDO EM {elapsed:.2f} SEGUNDOS ---")
print(f"Verifique a pasta 'workspace' para os {NUM_SIMULACOES} arquivos CSV gerados.")