Skip to main content

Library for Implementation of the dataless Neural Network for range of NP-hard problems

Project description

Dataless

PyPI version License: MIT Python Versions

Dataless is a python library implementation of the dataless neural network. This concept was introduced by the Alkhouri et.al in this work. This concept is mounmental achievement, as the work introduces a way to formulate the NP-hard problems as a differentiable function.

Formulation of the NP-hard problems in differentiable representation is a big deal, as it allows for gradient based optimizations, or backpropogation in other words. Thus, giving rise to the concept of dataless Neural Network (dNN). The conept of dNN is rigorously expanded by sangram K. Jena, in range of his work. Jena provided theoretical background of dNN for range of NP-hard problems.

In this library, implementation of those problems is also provided.


Overview

The dataless library, takes a graph and solve the graph for a particular NP-hard problem.

The dataless library expects networkx type graphs, which are either stored in pickle format generated directly on the run time. The neural network uses Adam optimizer with \alpha value of 0.5, combination of which is necessary to avoid the local minima during convergence.

dNN is converging the f(\theta) using backpropogation, and following equation shows forward pass of the dNN.

f(\theta)


Getting Started

Dataless library is fairly intuitive. In the first step install the library directly from PyPI:

pip install dataless

Library has a top level dNN object, and can be imported as follows.

from dataless.dNN import dNN 

dNN object the following parameters which can be defined on the runtime.

dNN(prob_type:str='mdds', graph:nx.Graph=None, use_random:bool=False, nodes:int=None, edges:List[(int, int)]=None, edge_prob:float=0.5)

Dataless library right now support dNNs for the following problems.

prob_type Acronym
mdds Minimum Disjunctive Dominating Set
mlds Minimum Liar's Dominating Set
dissoc Dissociation Set
dom Dominating Set
kcol K Coloring
veds Vertex Edge Dominating Set

graph:nx.Graph expects a graph from the networkx library. It is important to note that if the graph is in the format of a file then first the file must be read and graph should be extracted and then passed into the dNN object.

use_random:bool this parameter is used to generate a random gnp graph using the networkx library if set to true. If this parameter is set to true, then nodes:int is required. The nodes will be the number of vertices and edges:List[(int, int)] is a list of tuples, showing the edges between the vertices.

edge_prob:float is the edge probability which will be used to generate the random graph containing nodes vertices. If the edges then the generated graph will not be random.

dnn.solve(params={
    "selection_criteria": 0.5,
    "learning_rate": 0.0001,
    "max_steps": 100000,
    "runtime": False,
    "store_graph": False,
    "theta_init": [],
    "out_dir": 'output'
})

solve() is the top level method, which will start the training loop of the dNN. the interface of the method also accepts optional **kwargs, In the above it is defined as params and has the above default values.

The training loop of the dNN also the early stopping implemented with the patience of 5, the minima value of the f(\theta) is considered as the metric, if its value does not decreases for 25000 iterations then the dNN training stops, and the code follows with the post-training steps.

dnn.plot()

plot() provide a quick way to visualize the graph.

plot

📞 Contact Us

If you have any questions, suggestions, or issues, feel free to reach out:

We’d love to hear from you! 🚀


🤝 Contributing

We welcome contributions from the community! To contribute:

  1. Fork the repository.
  2. Clone your fork to your local machine.
  3. Create a new branch for your feature or bug fix.
  4. Commit your changes.
  5. Push the branch to your fork.
  6. Create a pull request from your fork to the main branch of the original repository.

Please make sure to:

  • Follow the coding style of the project.
  • Write tests for new features or bug fixes.
  • Ensure all tests pass before submitting a pull request.

We appreciate your help in making this project better! 🙌

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dataless-2.0.4.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dataless-2.0.4-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file dataless-2.0.4.tar.gz.

File metadata

  • Download URL: dataless-2.0.4.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.10.15

File hashes

Hashes for dataless-2.0.4.tar.gz
Algorithm Hash digest
SHA256 ddf4753ec20f38714b65f0cccab10e862face408593ffa02343ed4abe4efb967
MD5 3ad895e9bcf15953c47ef40777f32242
BLAKE2b-256 bf95592de71692465d52362da4c16bea0a1353d0b093af28dbd07c78c13ce6d0

See more details on using hashes here.

File details

Details for the file dataless-2.0.4-py3-none-any.whl.

File metadata

  • Download URL: dataless-2.0.4-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.10.15

File hashes

Hashes for dataless-2.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 57532df6860b1abe2460ac46c820d1479e8049343f36770f0871e4e98f980f7a
MD5 56c167949664d2d3b43f8cf5f4741b5d
BLAKE2b-256 bcc798439fb5b6b32a42512b16516d7946df0adb97f09a66e051eef636d3087c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page