Source code for qiskit_optimization.applications.graph_optimization_application

# This code is part of Qiskit.
# (C) Copyright IBM 2018, 2022.
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""An abstract class for graph optimization application classes."""

from abc import abstractmethod
from typing import Union, Optional, Dict, List

import networkx as nx
import numpy as np

import qiskit_optimization.optionals as _optionals
from .optimization_application import OptimizationApplication
from ..algorithms import OptimizationResult
from ..deprecation import DeprecatedType, deprecate_method

[docs]class GraphOptimizationApplication(OptimizationApplication): """ An abstract class for graph optimization applications. """ def __init__(self, graph: Union[nx.Graph, np.ndarray, List]) -> None: """ Args: graph: A graph representing a problem. It can be specified directly as a `NetworkX <https://networkx.org/>`_ graph, or as an array or list format suitable to build out a NetworkX graph. """ # The view of the graph is stored which means the graph can not be changed. self._graph = nx.Graph(graph).copy(as_view=True)
[docs] @_optionals.HAS_MATPLOTLIB.require_in_call def draw( self, result: Optional[Union[OptimizationResult, np.ndarray]] = None, pos: Optional[Dict[int, np.ndarray]] = None, ) -> None: """Draw a graph with the result. When the result is None, draw an original graph without colors. Args: result: The calculated result for the problem pos: The positions of nodes """ if result is None: nx.draw(self._graph, pos=pos, with_labels=True) else: self._draw_result(result, pos)
@abstractmethod def _draw_result( self, result: Union[OptimizationResult, np.ndarray], pos: Optional[Dict[int, np.ndarray]] = None, ) -> None: """Draw the result with colors Args: result : The calculated result for the problem pos: The positions of nodes """ pass @property def graph(self) -> nx.Graph: """Getter of the graph Returns: A graph for a problem """ return self._graph
[docs] @staticmethod @deprecate_method( "0.3.0", DeprecatedType.FUNCTION, "networkx.gnm_random_graph", "in NetworkX, directly" ) def random_graph(num_nodes: int, num_edges: int, seed: Optional[int] = None) -> nx.Graph: """ Args: num_nodes: The number of nodes in a graph num_edges: The number of edges in a graph seed: seed for a random graph Returns: A random graph of NetworkX """ return nx.gnm_random_graph(num_nodes, num_edges, seed)