Metadata-Version: 2.1
Name: lineoptim
Version: 1.1.1
Summary: A line optimization package for electrical conductors.
Author: David Senoner
Author-email: david.senoner@gmail.com
Project-URL: Github, https://github.com/davidsenoner/lineoptim
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Description-Content-Type: text/markdown
License-File: LICENCE
Requires-Dist: matplotlib
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: torch

# LineOptim - Electric Power Line Parameter Optimization

[![PyPI version](https://badge.fury.io/py/lineoptim.svg)](https://badge.fury.io/py/lineoptim) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**lineoptim** is an open-source package for electric power line simulation and optimization.
It provides the tools for simulating, visualizing and optimizing electric power lines and is designed to scale with larger and nested networks.

## Features

- **Line Simulation**: Simulate electric power lines with multiple loads and sub-lines. Get voltage drop, current power at any point in the line.
- **Optimization**: Optimize electric power lines for wanted voltage drop and optimal conductor size
- **Visualization**: Visualize electric power lines and their parameters


## Installation
```bash
pip install lineoptim
```

## Usage
```python
import lineoptim as lo
import torch

# Create a line
v_nominal = torch.tensor([400.0, 400.0, 400.0])  # nominal voltage

line_params = {
    "name": "Main power line 1",
    "position": 0,
    "resistivity": torch.tensor([0.12, 0.12, 0.12]),  # resistivity,
    "reactance": torch.tensor([0.0, 0.0, 0.0]),
    "v_nominal": v_nominal,
}

# create main line
main_line = lo.Line(**line_params)

# add loads to main line
main_line.add("Load 1", 100, active_power=20000, v_nominal=v_nominal, power_factor=0.9)
main_line.add("Load 2", 200, active_power=20000, v_nominal=v_nominal, power_factor=0.9)
main_line.add("Load 3", 300, active_power=20000, v_nominal=v_nominal, power_factor=0.9)

# create sub-line
sub_line = lo.Line('Sub-line 1', 400, v_nominal=v_nominal, resistivity=torch.tensor([0.145, 0.145, 0.145]))

# add loads to sub-line
sub_line.add("Load 4", 410, active_power=2000, v_nominal=v_nominal, power_factor=0.9)

# add sub-line to main line
main_line.add(**sub_line.dict())

network = lo.Network()  # create network
network.add(main_line)  # add line to network

network.optimize(epochs=200, lr=0.01, max_v_drop=5.0)  # optimize network on 5% voltage drop at line ends

main_line.save_to_json('resources/example_line.json')  # save line configuration as json
```

## Contributing
Contributions are welcome! For feature requests, bug reports or submitting pull requests, please use the [GitHub Issue Tracker](https://github.com/davidsenoner/lineoptim/issues).

# License
**lineoptim** is licensed under the open source [MIT Licence](https://github.com/davidsenoner/lineoptim/blob/main/LICENCE)

