ProcessGraph


NameProcessGraph JSON
Version 1.21 PyPI version JSON
download
home_page
SummaryConnecting Process Network Synthesis (PNS) to Modern Programming Ecosystems
upload_time2022-12-01 20:46:18
maintainer
docs_urlNone
authorSin Yong Teng
requires_python
licenseBSD 2-Clause
keywords process optimization process network synthesis artificial intelligence
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Pgraph : Process Graphs for Process Network Synthesis (PNS)

![Pgraphlogo](https://user-images.githubusercontent.com/19692103/176261331-5ec5fd1d-eec6-467c-b79c-ed48691eecfb.png)
[![DOI](https://zenodo.org/badge/507569838.svg)](https://zenodo.org/badge/latestdoi/507569838)

<!-- TABLE OF CONTENTS -->
## Table of Contents

* [About the Project](#about-the-project)
* [Getting Started](#getting-started)
* [Usage Examples](#usage-examples)
* [Contributing](#contributing)
* [License](#license)
* [Contact](#contact)
* [References](#references)


<!-- ABOUT THE PROJECT -->
## About The Project
This project aims at enabling the classical P-graph Framework (www.p-graph.org) to interface with modern Python programming ecosystems. The backend solver is the original executable from P-graph, staying true to the original implementation of P-graph. For manual network manipulation, the P-graph studio can be downloaded from this link: https://p-graph.org/downloads/. 



<!-- GETTING STARTED -->
## Getting Started

Install this library either from the official pypi or from this Github repository:

## Install a Stable Version (pypi)
```bat
pip install ProcessGraph
```
## Install most updated version from Github

In a environment terminal or CMD:
```bat
pip install git+https://github.com/tsyet12/Pgraph
```


<!-- USAGE EXAMPLES -->
## Usage Examples

See [`examples`](https://github.com/tsyet12/Pgraph/tree/main/examples) for all code examples.

### Simple Example
```python
from Pgraph.Pgraph import Pgraph #This is our Pgraph library
import networkx as nx
import matplotlib.pyplot as plt
##### STEP 1 : Problem Specification ######
G = nx.DiGraph()
G.add_node("M1",names="Product D",type='product',flow_rate_lower_bound=100, flow_rate_upper_bound=100)
G.add_node("M2",names="Chemical A",type='raw_material',price=200,flow_rate_lower_bound=0)
G.add_node("M3",names="Chemical B", type='raw_material',price=100,flow_rate_lower_bound=0)
G.add_node("M4",names="Chemical C", type='raw_material',price=10,flow_rate_lower_bound=0)
G.add_node("O1",names="Reactor 1",fix_cost=2000, proportional_cost=400)
G.add_node("O2", names="Reactor 2",fix_cost=1000, proportional_cost=400)
G.add_edge("M2","O1", weight = 1)
G.add_edge("M3","O2", weight = 1)
G.add_edge("M4","O2", weight = 2)
G.add_edge("O1","M1", weight = 0.7) 
G.add_edge("O2","M1", weight = 0.9) 
ME=[["O1","O2"]]  #Reactor 1 and Reactor 2 are mutually excluded. Only one can be chosen as solution.

#### Step 2:  Setup Solver ####
P=Pgraph(problem_network=G, mutual_exclusion=ME, solver="INSIDEOUT",max_sol=100)

#### Step 2.1:  Plot Problem #####
ax1=P.plot_problem(figsize=(5,5))
ax1.set_xlim(0,200)
plt.show()
##################################
```

![fullnetwork](https://user-images.githubusercontent.com/19692103/176417558-2506be4e-5283-4c7c-9dd7-d271e52555d0.png)

```python
#### Step 3: Run ####
P.run()
#### Step 3.1: Plot Solution########
total_sol_num=P.get_sol_num() 
for i in range(total_sol_num): # Here we loop through all the solutions to plot everything
    ax=P.plot_solution(sol_num=i) #Plot Solution Function
    ax.set_xlim(0,200)
    plt.show()
```

![example](https://user-images.githubusercontent.com/19692103/176265167-3e41b536-9f2b-48df-b559-9290277065e7.png)
![sol2](https://user-images.githubusercontent.com/19692103/176417706-dd2817eb-a6e0-4804-9c86-5d443d4567e6.png)

```python
#### Step 3.2: Export to P-graph Studio ####
from google.colab import files #This is only for google colab
string = P.to_studio(path='./',verbose=False) #export to p-graph studio
files.download("./studio_file.pgsx") #download for google colab
#Note: Please be reminded to press "Generate Layout" button in P-graph Studio after opening
```

Press "Generate Layout" Button:

![layout](https://user-images.githubusercontent.com/19692103/176418041-e970a0bd-1b93-4a64-9cdb-544ae8c6a88b.PNG)


<!-- CONTRIBUTING -->
## Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.

1. Fork the Project
2. Create your Feature Branch (`git checkout -b testbranch/prep`)
3. Commit your Changes (`git commit -m 'Improve testbranch/prep'`)
4. Push to the Branch (`git push origin testbranch/prep`)
5. Open a Pull Request


<!-- LICENSE -->
## License

Distributed under the Open Sourced BSD-2-Clause License. See [`LICENSE`](https://github.com/tsyet12/Chemsy/blob/main/LICENSE) for more information.


<!-- CONTACT -->
## Contact
Main Developer:

Sin Yong Teng sinyong.teng@ru.nl or tsyet12@gmail.com
Radboud University Nijmegen

<!-- References -->
## References

Friedler, F., Tarjan, K., Huang, Y.W. and Fan, L.T., 1992. Graph-theoretic approach to process synthesis: axioms and theorems. Chemical Engineering Science, 47(8), pp.1973-1988.

Friedler, F., Tarjan, K., Huang, Y.W. and Fan, L.T., 1992. Combinatorial algorithms for process synthesis. Computers & chemical engineering, 16, pp.S313-S320.

Friedler, F., Tarjan, K., Huang, Y.W. and Fan, L.T., 1993. Graph-theoretic approach to process synthesis: polynomial algorithm for maximal structure generation. Computers & Chemical Engineering, 17(9), pp.929-942.



            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "ProcessGraph",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "Process Optimization,Process Network Synthesis,Artificial Intelligence",
    "author": "Sin Yong Teng",
    "author_email": "tsyet12@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/56/69/a140879fa7ad277520a907f326e012735f1af81d8dca99ebdb55d4dad1c6/ProcessGraph-1.21.tar.gz",
    "platform": null,
    "description": "# Pgraph : Process Graphs for Process Network Synthesis (PNS)\r\n\r\n![Pgraphlogo](https://user-images.githubusercontent.com/19692103/176261331-5ec5fd1d-eec6-467c-b79c-ed48691eecfb.png)\r\n[![DOI](https://zenodo.org/badge/507569838.svg)](https://zenodo.org/badge/latestdoi/507569838)\r\n\r\n<!-- TABLE OF CONTENTS -->\r\n## Table of Contents\r\n\r\n* [About the Project](#about-the-project)\r\n* [Getting Started](#getting-started)\r\n* [Usage Examples](#usage-examples)\r\n* [Contributing](#contributing)\r\n* [License](#license)\r\n* [Contact](#contact)\r\n* [References](#references)\r\n\r\n\r\n<!-- ABOUT THE PROJECT -->\r\n## About The Project\r\nThis project aims at enabling the classical P-graph Framework (www.p-graph.org) to interface with modern Python programming ecosystems. The backend solver is the original executable from P-graph, staying true to the original implementation of P-graph. For manual network manipulation, the P-graph studio can be downloaded from this link: https://p-graph.org/downloads/. \r\n\r\n\r\n\r\n<!-- GETTING STARTED -->\r\n## Getting Started\r\n\r\nInstall this library either from the official pypi or from this Github repository:\r\n\r\n## Install a Stable Version (pypi)\r\n```bat\r\npip install ProcessGraph\r\n```\r\n## Install most updated version from Github\r\n\r\nIn a environment terminal or CMD:\r\n```bat\r\npip install git+https://github.com/tsyet12/Pgraph\r\n```\r\n\r\n\r\n<!-- USAGE EXAMPLES -->\r\n## Usage Examples\r\n\r\nSee [`examples`](https://github.com/tsyet12/Pgraph/tree/main/examples) for all code examples.\r\n\r\n### Simple Example\r\n```python\r\nfrom Pgraph.Pgraph import Pgraph #This is our Pgraph library\r\nimport networkx as nx\r\nimport matplotlib.pyplot as plt\r\n##### STEP 1 : Problem Specification ######\r\nG = nx.DiGraph()\r\nG.add_node(\"M1\",names=\"Product D\",type='product',flow_rate_lower_bound=100, flow_rate_upper_bound=100)\r\nG.add_node(\"M2\",names=\"Chemical A\",type='raw_material',price=200,flow_rate_lower_bound=0)\r\nG.add_node(\"M3\",names=\"Chemical B\", type='raw_material',price=100,flow_rate_lower_bound=0)\r\nG.add_node(\"M4\",names=\"Chemical C\", type='raw_material',price=10,flow_rate_lower_bound=0)\r\nG.add_node(\"O1\",names=\"Reactor 1\",fix_cost=2000, proportional_cost=400)\r\nG.add_node(\"O2\", names=\"Reactor 2\",fix_cost=1000, proportional_cost=400)\r\nG.add_edge(\"M2\",\"O1\", weight = 1)\r\nG.add_edge(\"M3\",\"O2\", weight = 1)\r\nG.add_edge(\"M4\",\"O2\", weight = 2)\r\nG.add_edge(\"O1\",\"M1\", weight = 0.7) \r\nG.add_edge(\"O2\",\"M1\", weight = 0.9) \r\nME=[[\"O1\",\"O2\"]]  #Reactor 1 and Reactor 2 are mutually excluded. Only one can be chosen as solution.\r\n\r\n#### Step 2:  Setup Solver ####\r\nP=Pgraph(problem_network=G, mutual_exclusion=ME, solver=\"INSIDEOUT\",max_sol=100)\r\n\r\n#### Step 2.1:  Plot Problem #####\r\nax1=P.plot_problem(figsize=(5,5))\r\nax1.set_xlim(0,200)\r\nplt.show()\r\n##################################\r\n```\r\n\r\n![fullnetwork](https://user-images.githubusercontent.com/19692103/176417558-2506be4e-5283-4c7c-9dd7-d271e52555d0.png)\r\n\r\n```python\r\n#### Step 3: Run ####\r\nP.run()\r\n#### Step 3.1: Plot Solution########\r\ntotal_sol_num=P.get_sol_num() \r\nfor i in range(total_sol_num): # Here we loop through all the solutions to plot everything\r\n    ax=P.plot_solution(sol_num=i) #Plot Solution Function\r\n    ax.set_xlim(0,200)\r\n    plt.show()\r\n```\r\n\r\n![example](https://user-images.githubusercontent.com/19692103/176265167-3e41b536-9f2b-48df-b559-9290277065e7.png)\r\n![sol2](https://user-images.githubusercontent.com/19692103/176417706-dd2817eb-a6e0-4804-9c86-5d443d4567e6.png)\r\n\r\n```python\r\n#### Step 3.2: Export to P-graph Studio ####\r\nfrom google.colab import files #This is only for google colab\r\nstring = P.to_studio(path='./',verbose=False) #export to p-graph studio\r\nfiles.download(\"./studio_file.pgsx\") #download for google colab\r\n#Note: Please be reminded to press \"Generate Layout\" button in P-graph Studio after opening\r\n```\r\n\r\nPress \"Generate Layout\" Button:\r\n\r\n![layout](https://user-images.githubusercontent.com/19692103/176418041-e970a0bd-1b93-4a64-9cdb-544ae8c6a88b.PNG)\r\n\r\n\r\n<!-- CONTRIBUTING -->\r\n## Contributing\r\n\r\nContributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\r\n\r\n1. Fork the Project\r\n2. Create your Feature Branch (`git checkout -b testbranch/prep`)\r\n3. Commit your Changes (`git commit -m 'Improve testbranch/prep'`)\r\n4. Push to the Branch (`git push origin testbranch/prep`)\r\n5. Open a Pull Request\r\n\r\n\r\n<!-- LICENSE -->\r\n## License\r\n\r\nDistributed under the Open Sourced BSD-2-Clause License. See [`LICENSE`](https://github.com/tsyet12/Chemsy/blob/main/LICENSE) for more information.\r\n\r\n\r\n<!-- CONTACT -->\r\n## Contact\r\nMain Developer:\r\n\r\nSin Yong Teng sinyong.teng@ru.nl or tsyet12@gmail.com\r\nRadboud University Nijmegen\r\n\r\n<!-- References -->\r\n## References\r\n\r\nFriedler, F., Tarjan, K., Huang, Y.W. and Fan, L.T., 1992. Graph-theoretic approach to process synthesis: axioms and theorems. Chemical Engineering Science, 47(8), pp.1973-1988.\r\n\r\nFriedler, F., Tarjan, K., Huang, Y.W. and Fan, L.T., 1992. Combinatorial algorithms for process synthesis. Computers & chemical engineering, 16, pp.S313-S320.\r\n\r\nFriedler, F., Tarjan, K., Huang, Y.W. and Fan, L.T., 1993. Graph-theoretic approach to process synthesis: polynomial algorithm for maximal structure generation. Computers & Chemical Engineering, 17(9), pp.929-942.\r\n\r\n\r\n",
    "bugtrack_url": null,
    "license": "BSD 2-Clause",
    "summary": "Connecting Process Network Synthesis (PNS) to Modern Programming Ecosystems",
    "version": "1.21",
    "split_keywords": [
        "process optimization",
        "process network synthesis",
        "artificial intelligence"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "36e4ed481283cbf2b606fe602e690c98",
                "sha256": "3f201471a06dd1c13bdb5558a0766f05ce7be25eff3d2188459872118548288d"
            },
            "downloads": -1,
            "filename": "ProcessGraph-1.21.tar.gz",
            "has_sig": false,
            "md5_digest": "36e4ed481283cbf2b606fe602e690c98",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 2062103,
            "upload_time": "2022-12-01T20:46:18",
            "upload_time_iso_8601": "2022-12-01T20:46:18.521422Z",
            "url": "https://files.pythonhosted.org/packages/56/69/a140879fa7ad277520a907f326e012735f1af81d8dca99ebdb55d4dad1c6/ProcessGraph-1.21.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-12-01 20:46:18",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "lcname": "processgraph"
}
        
Elapsed time: 0.01257s