yasir-agdo-mt 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- yasir_agdo_mt-1.0.0/LICENSE +21 -0
- yasir_agdo_mt-1.0.0/PKG-INFO +538 -0
- yasir_agdo_mt-1.0.0/README.md +504 -0
- yasir_agdo_mt-1.0.0/pyproject.toml +67 -0
- yasir_agdo_mt-1.0.0/setup.cfg +4 -0
- yasir_agdo_mt-1.0.0/tests/test_agdo.py +222 -0
- yasir_agdo_mt-1.0.0/tests/test_edi.py +178 -0
- yasir_agdo_mt-1.0.0/tests/test_forward.py +11 -0
- yasir_agdo_mt-1.0.0/tests/test_initialization.py +37 -0
- yasir_agdo_mt-1.0.0/tests/test_inversion.py +232 -0
- yasir_agdo_mt-1.0.0/tests/test_levy.py +15 -0
- yasir_agdo_mt-1.0.0/tests/test_objective.py +22 -0
- yasir_agdo_mt-1.0.0/tests/test_synthetic.py +132 -0
- yasir_agdo_mt-1.0.0/tests/test_visualization.py +202 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/__init__.py +76 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/constants.py +15 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/core/__init__.py +31 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/core/forward.py +253 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/core/inversion.py +204 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/core/objective.py +128 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/exceptions.py +15 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/io/__init__.py +18 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/io/edi.py +334 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/optimizers/__init__.py +26 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/optimizers/agdo.py +368 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/optimizers/initialization.py +61 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/optimizers/levy.py +60 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/synthetic/__init__.py +20 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/synthetic/models.py +106 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/synthetic/noise.py +61 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/utils/__init__.py +0 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/utils/helpers.py +0 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/version.py +5 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/visualization/__init__.py +15 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt/visualization/plots.py +248 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt.egg-info/PKG-INFO +538 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt.egg-info/SOURCES.txt +38 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt.egg-info/dependency_links.txt +1 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt.egg-info/requires.txt +9 -0
- yasir_agdo_mt-1.0.0/yasir_agdo_mt.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Muhammad Fadhilah Al Yasir Harahap
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: yasir-agdo-mt
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: A Python library for one-dimensional magnetotelluric inversion using the Adam Gradient Descent Optimizer (AGDO).
|
|
5
|
+
Author-email: Muhammad Fadhilah Al Yasir Harahap <alyasirharahap@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/<USERNAME>/AGDO-MT-Inversion
|
|
8
|
+
Project-URL: Repository, https://github.com/<USERNAME>/AGDO-MT-Inversion
|
|
9
|
+
Project-URL: Issues, https://github.com/<USERNAME>/AGDO-MT-Inversion/issues
|
|
10
|
+
Keywords: magnetotellurics,geophysics,inversion,optimization,AGDO,electromagnetics
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Intended Audience :: Education
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: numpy>=1.24
|
|
26
|
+
Requires-Dist: scipy>=1.10
|
|
27
|
+
Requires-Dist: matplotlib>=3.7
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
30
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
31
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
32
|
+
Requires-Dist: twine>=6.0; extra == "dev"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# AGDO-MT
|
|
36
|
+
|
|
37
|
+
<p align="center">
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+

|
|
41
|
+

|
|
42
|
+

|
|
43
|
+
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
|
|
48
|
+
<b>A Python package for One-Dimensional Magnetotelluric (MT) Forward Modelling and Inversion using the Adam Gradient Descent Optimizer (AGDO).</b>
|
|
49
|
+
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
|
|
54
|
+
Scientific Python Package • Forward Modelling • AGDO Optimization • SEG-EDI Reader • Visualization
|
|
55
|
+
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
<p align="center">
|
|
61
|
+
|
|
62
|
+
<img src="figures/workflow.png" width="900">
|
|
63
|
+
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
AGDO-MT is an open-source Python package designed for one-dimensional (1D) magnetotelluric (MT) forward modelling and inversion. The package provides a complete workflow, including MT forward modelling, synthetic data generation, SEG-EDI file processing, visualization, and inversion using the Adam Gradient Descent Optimizer (AGDO).
|
|
67
|
+
|
|
68
|
+
Originally developed as part of undergraduate research at Institut Teknologi Sumatera (ITERA), AGDO-MT has subsequently been described in a peer-reviewed journal publication. The package aims to provide a reproducible, extensible, and research-oriented framework for one-dimensional magnetotelluric inversion studies.
|
|
69
|
+
|
|
70
|
+
# Features
|
|
71
|
+
|
|
72
|
+
### Forward Modelling
|
|
73
|
+
|
|
74
|
+
- One-dimensional layered-earth MT forward modelling
|
|
75
|
+
- Apparent resistivity computation
|
|
76
|
+
- Phase computation
|
|
77
|
+
|
|
78
|
+
### Inversion
|
|
79
|
+
|
|
80
|
+
- Adam Gradient Descent Optimizer (AGDO)
|
|
81
|
+
- Early stopping criterion
|
|
82
|
+
- Adaptive learning rate
|
|
83
|
+
- Population-based exploration
|
|
84
|
+
- Levy Flight strategy
|
|
85
|
+
|
|
86
|
+
### Data Processing
|
|
87
|
+
|
|
88
|
+
- SEG-EDI file reader
|
|
89
|
+
- MT response extraction
|
|
90
|
+
- Synthetic MT model generation
|
|
91
|
+
- Gaussian noise simulation
|
|
92
|
+
|
|
93
|
+
### Visualization
|
|
94
|
+
|
|
95
|
+
- MT response plots
|
|
96
|
+
- Layered resistivity models
|
|
97
|
+
- Convergence curves
|
|
98
|
+
- Ensemble inversion analysis
|
|
99
|
+
|
|
100
|
+
### Software Engineering
|
|
101
|
+
|
|
102
|
+
- Modular Python package
|
|
103
|
+
- Unit-tested implementation (36 tests)
|
|
104
|
+
- Validation notebooks
|
|
105
|
+
- Type hints and NumPy-style documentation
|
|
106
|
+
|
|
107
|
+
# Installation
|
|
108
|
+
|
|
109
|
+
Clone the repository
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
git clone https://github.com/alyasirharahap/AGDO-MT-Inversion.git
|
|
113
|
+
cd AGDO-MT-Inversion
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Create a virtual environment (optional but recommended)
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
python -m venv .venv
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Activate the environment
|
|
123
|
+
|
|
124
|
+
Windows
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
.venv\Scripts\activate
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Linux / macOS
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
source .venv/bin/activate
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Install the package
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pip install -e .
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
# Quick Start
|
|
143
|
+
|
|
144
|
+
## Read an EDI file
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
from yasir_agdo_mt.io import read_edi
|
|
148
|
+
|
|
149
|
+
edi = read_edi("data/edi/L09S10_edt.edi")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Perform forward modelling
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from yasir_agdo_mt.core import mt1d
|
|
156
|
+
|
|
157
|
+
Z, rho, phase = mt1d(
|
|
158
|
+
frequency,
|
|
159
|
+
resistivity,
|
|
160
|
+
thickness
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
## Optimizer Configuration
|
|
165
|
+
|
|
166
|
+
The optimizer behavior can be customized using `AGDOConfig`.
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
from yasir_agdo_mt import AGDOConfig
|
|
170
|
+
|
|
171
|
+
config = AGDOConfig(
|
|
172
|
+
npop=200,
|
|
173
|
+
niter=300,
|
|
174
|
+
learning_rate=0.05,
|
|
175
|
+
tolerance=1e-3,
|
|
176
|
+
patience=25,
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
result = invert_mt1d(
|
|
180
|
+
frequency,
|
|
181
|
+
rho_obs,
|
|
182
|
+
phase_obs,
|
|
183
|
+
lb,
|
|
184
|
+
ub,
|
|
185
|
+
config=config,
|
|
186
|
+
)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Run inversion
|
|
190
|
+
|
|
191
|
+
```python
|
|
192
|
+
from yasir_agdo_mt.core import invert_mt1d
|
|
193
|
+
|
|
194
|
+
result = invert_mt1d(...)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Visualize
|
|
198
|
+
|
|
199
|
+
```python
|
|
200
|
+
from yasir_agdo_mt.visualization import (
|
|
201
|
+
plot_model,
|
|
202
|
+
plot_mt_response,
|
|
203
|
+
plot_convergence,
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
plot_model(result)
|
|
207
|
+
```
|
|
208
|
+
# Validation
|
|
209
|
+
|
|
210
|
+
The package has been validated using:
|
|
211
|
+
|
|
212
|
+
- Analytical forward modelling
|
|
213
|
+
- Synthetic layered-earth models
|
|
214
|
+
- Field MT datasets
|
|
215
|
+
- Benchmark optimization functions
|
|
216
|
+
- Automated unit testing
|
|
217
|
+
|
|
218
|
+
| Component | Status |
|
|
219
|
+
|----------|:------:|
|
|
220
|
+
| Forward Modelling | ✅ |
|
|
221
|
+
| AGDO Optimizer | ✅ |
|
|
222
|
+
| SEG-EDI Reader | ✅ |
|
|
223
|
+
| Visualization | ✅ |
|
|
224
|
+
| Synthetic Data | ✅ |
|
|
225
|
+
| Unit Tests | ✅ (36 Passed) |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
# Scientific Background
|
|
230
|
+
|
|
231
|
+
Magnetotelluric (MT) inversion is a nonlinear and non-unique optimization problem aimed at estimating subsurface electrical resistivity models from observed apparent resistivity and phase responses. Conventional optimization methods often depend on the initial model and may become trapped in local minima.
|
|
232
|
+
|
|
233
|
+
AGDO-MT addresses these challenges by implementing the Adam Gradient Descent Optimizer (AGDO), which combines adaptive gradient optimization with population-based exploration to achieve stable convergence while maintaining computational efficiency.
|
|
234
|
+
|
|
235
|
+
The package has been validated using benchmark functions, synthetic MT models, and real field datasets, providing a reproducible framework for magnetotelluric inversion research.
|
|
236
|
+
|
|
237
|
+
# Experimental Setup
|
|
238
|
+
|
|
239
|
+
The performance of the proposed AGDO algorithm was evaluated through three consecutive experiments designed to assess its optimization capability, inversion accuracy, and applicability to real magnetotelluric (MT) data.
|
|
240
|
+
|
|
241
|
+
| Stage | Objective |
|
|
242
|
+
|--------|-----------|
|
|
243
|
+
| Benchmark Function | Evaluate the global optimization capability of AGDO |
|
|
244
|
+
| Synthetic MT Inversion | Assess inversion accuracy using controlled layered-earth resistivity models |
|
|
245
|
+
| Field MT Inversion | Validate the proposed algorithm using real MT observations |
|
|
246
|
+
|
|
247
|
+
# Synthetic Dataset
|
|
248
|
+
|
|
249
|
+
Synthetic MT responses were generated from one-dimensional layered-earth resistivity models using forward modelling. To simulate realistic measurement conditions, Gaussian noise with a standard deviation of 5% was added to the calculated apparent resistivity and phase responses.
|
|
250
|
+
|
|
251
|
+
| Parameter | Value |
|
|
252
|
+
|-----------|------:|
|
|
253
|
+
| Earth Model | Layered Earth |
|
|
254
|
+
| Frequency Range | 10⁻³ – 10⁴ Hz |
|
|
255
|
+
| Number of Frequencies | 56 |
|
|
256
|
+
| Noise Level | 5% Gaussian Noise |
|
|
257
|
+
| Independent Runs | 100 |
|
|
258
|
+
|
|
259
|
+
# Field Dataset
|
|
260
|
+
|
|
261
|
+
Field validation was performed using publicly available magnetotelluric (MT) data acquired from the Cloncurry region, Queensland, Australia. The dataset is provided in SEG-EDI format and contains frequency, impedance tensor, apparent resistivity, and phase information.
|
|
262
|
+
|
|
263
|
+
An example dataset included in this repository is:
|
|
264
|
+
|
|
265
|
+
```text
|
|
266
|
+
data/edi/L09S10_edt.edi
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
The EDI files serve as the input for the one-dimensional inversion workflow implemented in AGDO-MT.
|
|
270
|
+
|
|
271
|
+
# AGDO Parameters
|
|
272
|
+
|
|
273
|
+
Two optimization configurations were used throughout the experiments.
|
|
274
|
+
|
|
275
|
+
| Parameter | Synthetic | Field |
|
|
276
|
+
|-----------|----------:|------:|
|
|
277
|
+
| Population Size | 120 | 200 |
|
|
278
|
+
| Maximum Iterations | 150 | 300 |
|
|
279
|
+
| Learning Rate | 0.05 | Adaptive |
|
|
280
|
+
| β₁ | 0.9 | 0.9 |
|
|
281
|
+
| β₂ | 0.999 | 0.999 |
|
|
282
|
+
| Early Stopping | Enabled | Enabled |
|
|
283
|
+
|
|
284
|
+
The parameter settings were selected empirically to provide stable convergence while maintaining computational efficiency for both synthetic and field inversion experiments.
|
|
285
|
+
|
|
286
|
+
# Results
|
|
287
|
+
|
|
288
|
+
The proposed AGDO algorithm was evaluated using benchmark optimization problems, synthetic MT inversion experiments, and field MT datasets. Overall, the results demonstrate stable convergence, accurate reconstruction of layered-earth resistivity models, and consistent performance across repeated optimization runs.
|
|
289
|
+
|
|
290
|
+
## Benchmark Function
|
|
291
|
+
|
|
292
|
+
The Peaks benchmark function was used to verify the global optimization capability of AGDO before applying the algorithm to MT inversion.
|
|
293
|
+
|
|
294
|
+
<p align="center">
|
|
295
|
+
<img src="figures/peaks.png" width="850">
|
|
296
|
+
</p>
|
|
297
|
+
|
|
298
|
+
The optimization process demonstrates AGDO's ability to efficiently explore the search space during the early iterations and gradually converge toward the global optimum.
|
|
299
|
+
|
|
300
|
+
## Synthetic MT Inversion
|
|
301
|
+
|
|
302
|
+
Four synthetic layered-earth resistivity models with different geological configurations were used to evaluate the inversion performance of AGDO.
|
|
303
|
+
|
|
304
|
+
### Model 1
|
|
305
|
+
|
|
306
|
+
<p align="center">
|
|
307
|
+
<img src="figures/synthetic_model1.png" width="850">
|
|
308
|
+
</p>
|
|
309
|
+
|
|
310
|
+
### Model 2
|
|
311
|
+
|
|
312
|
+
<p align="center">
|
|
313
|
+
<img src="figures/synthetic_model2.png" width="850">
|
|
314
|
+
</p>
|
|
315
|
+
|
|
316
|
+
### Model 3
|
|
317
|
+
|
|
318
|
+
<p align="center">
|
|
319
|
+
<img src="figures/synthetic_model3.png" width="850">
|
|
320
|
+
</p>
|
|
321
|
+
|
|
322
|
+
### Model 4
|
|
323
|
+
|
|
324
|
+
<p align="center">
|
|
325
|
+
<img src="figures/synthetic_model4.png" width="850">
|
|
326
|
+
</p>
|
|
327
|
+
|
|
328
|
+
Across all four synthetic models, AGDO successfully reconstructed the original layered-earth resistivity structures with low RMSE values and stable convergence behavior.
|
|
329
|
+
|
|
330
|
+
## Convergence Analysis
|
|
331
|
+
|
|
332
|
+
<p align="center">
|
|
333
|
+
<img src="figures/convergence.png" width="800">
|
|
334
|
+
</p>
|
|
335
|
+
|
|
336
|
+
The convergence curves show a rapid decrease in RMSE during the initial iterations, followed by gradual convergence toward stable solutions. This behavior indicates that AGDO effectively balances global exploration and local exploitation throughout the optimization process.
|
|
337
|
+
|
|
338
|
+
## Field MT Inversion
|
|
339
|
+
|
|
340
|
+
The proposed algorithm was further validated using three MT stations from the Cloncurry region, Queensland, Australia.
|
|
341
|
+
|
|
342
|
+
### Station L02S18
|
|
343
|
+
|
|
344
|
+
<p align="center">
|
|
345
|
+
<img src="figures/field_L02S18.png" width="850">
|
|
346
|
+
</p>
|
|
347
|
+
|
|
348
|
+
### Station L19S12
|
|
349
|
+
|
|
350
|
+
<p align="center">
|
|
351
|
+
<img src="figures/field_L19S12.png" width="850">
|
|
352
|
+
</p>
|
|
353
|
+
|
|
354
|
+
### Station L19S10
|
|
355
|
+
|
|
356
|
+
<p align="center">
|
|
357
|
+
<img src="figures/field_L19S10.png" width="850">
|
|
358
|
+
</p>
|
|
359
|
+
|
|
360
|
+
The calculated apparent resistivity and phase responses show good agreement with the observed data, demonstrating that AGDO can successfully recover realistic subsurface resistivity models from field MT measurements.
|
|
361
|
+
|
|
362
|
+
# Computational Performance
|
|
363
|
+
|
|
364
|
+
The performance of AGDO-MT was evaluated on the following hardware configuration.
|
|
365
|
+
|
|
366
|
+
| Component | Specification |
|
|
367
|
+
|-----------|---------------|
|
|
368
|
+
| Processor | AMD Ryzen 5 7535HS |
|
|
369
|
+
| Memory | 16 GB RAM |
|
|
370
|
+
| GPU | NVIDIA GeForce RTX 3050 Laptop GPU |
|
|
371
|
+
| Operating System | Windows 11 |
|
|
372
|
+
| Python Version | Python 3.10 |
|
|
373
|
+
|
|
374
|
+
The average execution time for a single inversion run is approximately **20 seconds** under the experimental settings used in this study. Actual execution time may vary depending on the optimization parameters, model complexity, hardware specifications, and Python environment.
|
|
375
|
+
|
|
376
|
+
# Main Findings
|
|
377
|
+
|
|
378
|
+
The experimental results demonstrate that:
|
|
379
|
+
|
|
380
|
+
- AGDO successfully reconstructs one-dimensional layered-earth resistivity models from both synthetic and field MT data.
|
|
381
|
+
- The optimizer achieves stable convergence while maintaining a balance between global exploration and local exploitation.
|
|
382
|
+
- Synthetic inversion experiments produce low RMSE values and accurately recover the original resistivity structures.
|
|
383
|
+
- Field inversion results show good agreement between observed and calculated apparent resistivity and phase responses.
|
|
384
|
+
- The modular implementation facilitates reproducible research and future algorithm development.
|
|
385
|
+
|
|
386
|
+
# Limitations
|
|
387
|
+
|
|
388
|
+
The current implementation focuses on one-dimensional magnetotelluric (MT) inversion under the assumption of horizontally layered earth models. The package does not currently support:
|
|
389
|
+
|
|
390
|
+
- Two-dimensional (2D) MT inversion
|
|
391
|
+
- Three-dimensional (3D) MT inversion
|
|
392
|
+
- Joint geophysical inversion
|
|
393
|
+
- Parallel or distributed optimization
|
|
394
|
+
|
|
395
|
+
# Future Work
|
|
396
|
+
|
|
397
|
+
Potential future developments of AGDO-MT include:
|
|
398
|
+
|
|
399
|
+
- Extension to two-dimensional (2D) MT inversion
|
|
400
|
+
- Extension to three-dimensional (3D) MT inversion
|
|
401
|
+
- GPU acceleration for faster optimization
|
|
402
|
+
- Parallel optimization strategies
|
|
403
|
+
- Comparative studies with other optimization algorithms (e.g., PSO, GWO, and OOBO)
|
|
404
|
+
- Adaptive population strategies
|
|
405
|
+
- Multi-objective optimization
|
|
406
|
+
- Joint geophysical inversion
|
|
407
|
+
|
|
408
|
+
# Repository Gallery
|
|
409
|
+
|
|
410
|
+
The following figures summarize the major stages and results of the AGDO-MT inversion workflow.
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## Benchmark Optimization
|
|
415
|
+
|
|
416
|
+
<p align="center">
|
|
417
|
+
<img src="figures/peaks.png" width="850">
|
|
418
|
+
</p>
|
|
419
|
+
|
|
420
|
+
The Peaks benchmark function was used to evaluate the global optimization capability of AGDO prior to MT inversion.
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Synthetic MT Inversion
|
|
425
|
+
|
|
426
|
+
<p align="center">
|
|
427
|
+
<img src="figures/synthetic_model1.png" width="850">
|
|
428
|
+
</p>
|
|
429
|
+
|
|
430
|
+
<p align="center">
|
|
431
|
+
<img src="figures/synthetic_model2.png" width="850">
|
|
432
|
+
</p>
|
|
433
|
+
|
|
434
|
+
<p align="center">
|
|
435
|
+
<img src="figures/synthetic_model3.png" width="850">
|
|
436
|
+
</p>
|
|
437
|
+
|
|
438
|
+
<p align="center">
|
|
439
|
+
<img src="figures/synthetic_model4.png" width="850">
|
|
440
|
+
</p>
|
|
441
|
+
|
|
442
|
+
Four synthetic layered-earth models were used to evaluate inversion accuracy under different resistivity configurations.
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## Convergence Analysis
|
|
447
|
+
|
|
448
|
+
<p align="center">
|
|
449
|
+
<img src="figures/convergence.png" width="800">
|
|
450
|
+
</p>
|
|
451
|
+
|
|
452
|
+
The convergence history illustrates the optimization behavior of AGDO throughout the inversion process.
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## Field MT Inversion
|
|
457
|
+
|
|
458
|
+
### Station L02S18
|
|
459
|
+
|
|
460
|
+
<p align="center">
|
|
461
|
+
<img src="figures/field_L02S18.png" width="850">
|
|
462
|
+
</p>
|
|
463
|
+
|
|
464
|
+
### Station L19S12
|
|
465
|
+
|
|
466
|
+
<p align="center">
|
|
467
|
+
<img src="figures/field_L19S12.png" width="850">
|
|
468
|
+
</p>
|
|
469
|
+
|
|
470
|
+
### Station L19S10
|
|
471
|
+
|
|
472
|
+
<p align="center">
|
|
473
|
+
<img src="figures/field_L19S10.png" width="850">
|
|
474
|
+
</p>
|
|
475
|
+
|
|
476
|
+
The field inversion results demonstrate good agreement between observed and calculated MT responses, indicating the applicability of AGDO to real MT datasets.
|
|
477
|
+
|
|
478
|
+
# Citation
|
|
479
|
+
|
|
480
|
+
If you use AGDO-MT in your research, please cite the associated publication.
|
|
481
|
+
|
|
482
|
+
```bibtex
|
|
483
|
+
@article{harahap2026agdo,
|
|
484
|
+
author = {Muhammad Fadhilah Al Yasir Harahap and Ledi Defita Yeni},
|
|
485
|
+
title = {Application of the Adam Gradient Descent Optimizer (AGDO) for One-Dimensional Magnetotelluric (MT) Data Inversion},
|
|
486
|
+
journal = {Phi: Jurnal Pendidikan Fisika dan Terapan},
|
|
487
|
+
volume = {12},
|
|
488
|
+
number = {2},
|
|
489
|
+
pages = {316--331},
|
|
490
|
+
year = {2026},
|
|
491
|
+
doi = {},
|
|
492
|
+
url = {https://jurnal.ar-raniry.ac.id/index.php/jurnalphi/article/view/34593}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
**Publication**
|
|
498
|
+
|
|
499
|
+
https://jurnal.ar-raniry.ac.id/index.php/jurnalphi/article/view/34593
|
|
500
|
+
|
|
501
|
+
# License
|
|
502
|
+
|
|
503
|
+
This project is released under the MIT License. See the `LICENSE` file for more information.
|
|
504
|
+
|
|
505
|
+
# Author
|
|
506
|
+
|
|
507
|
+
**Muhammad Fadhilah Al Yasir Harahap**
|
|
508
|
+
|
|
509
|
+
Department of Geophysical Engineering
|
|
510
|
+
|
|
511
|
+
Faculty of Industrial Technology
|
|
512
|
+
|
|
513
|
+
Institut Teknologi Sumatera (ITERA)
|
|
514
|
+
|
|
515
|
+
Indonesia
|
|
516
|
+
|
|
517
|
+
# Acknowledgements
|
|
518
|
+
|
|
519
|
+
The author gratefully acknowledges:
|
|
520
|
+
|
|
521
|
+
- Institut Teknologi Sumatera (ITERA)
|
|
522
|
+
- Department of Geophysical Engineering
|
|
523
|
+
- Geoscience Australia for providing the public MT dataset
|
|
524
|
+
- Researchers whose previous work contributed to the development of this study
|
|
525
|
+
|
|
526
|
+
# Contact
|
|
527
|
+
|
|
528
|
+
For questions, suggestions, or collaboration:
|
|
529
|
+
|
|
530
|
+
**Email:** alyasirharahap@gmail.com
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
<p align="center">
|
|
535
|
+
|
|
536
|
+
⭐ If you find AGDO-MT useful for your research, please consider giving this repository a star.
|
|
537
|
+
|
|
538
|
+
</p>
|