Skip to content

cspy.PSOLGENT example code fails #111

Description

@czeni

Describe the bug

The example code for cspy.PSOLGENT fails with latest version (1.0.3) and Python3.11 and also with Python3.10.

To Reproduce

Python 3.11.2 (main, Feb  8 2023, 14:49:24) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from cspy import PSOLGENT
>>> from networkx import DiGraph
>>> from numpy import zeros, ones, array
>>> G = DiGraph(directed=True, n_res=2)
>>> G.add_edge('Source', 'A', res_cost=array([1, 1]), weight=1)
>>> G.add_edge('Source', 'B', res_cost=array([1, 1]), weight=1)
>>> G.add_edge('Source', 'C', res_cost=array([10, 1]), weight=10)
>>> G.add_edge('A', 'C', res_cost=array([1, 1]), weight=1)
>>> G.add_edge('A', 'E', res_cost=array([10, 1]), weight=10)
>>> G.add_edge('A', 'F', res_cost=array([10, 1]), weight=10)
>>> G.add_edge('B', 'C', res_cost=array([2, 1]), weight=-1)
>>> G.add_edge('B', 'F', res_cost=array([10, 1]), weight=10)
>>> G.add_edge('B', 'E', res_cost=array([10, 1]), weight=10)
>>> G.add_edge('C', 'D', res_cost=array([1, 1]), weight=-1)
>>> G.add_edge('D', 'E', res_cost=array([1, 1]), weight=1)
>>> G.add_edge('D', 'F', res_cost=array([1, 1]), weight=1)
>>> G.add_edge('D', 'Sink', res_cost=array([10, 10]), weight=10)
>>> G.add_edge('F', 'Sink', res_cost=array([10, 1]), weight=1)
>>> G.add_edge('E', 'Sink', res_cost=array([1, 1]), weight=1)
>>> n_nodes = len(G.nodes())
>>> psolgent = PSOLGENT(G, [5, 5], [0, 0],
...                         max_iter=200,
...                         swarm_size=50,
...                         member_size=n_nodes,
...                         neighbourhood_size=50)
>>> psolgent.run()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/czentye/.local/lib/python3.11/site-packages/cspy/algorithms/psolgent.py", line 179, in run
    self._init_swarm()
  File "/home/czentye/.local/lib/python3.11/site-packages/cspy/algorithms/psolgent.py", line 232, in _init_swarm
    self.pos[:, [0, -1]] = min(10 * self.lower_bound, np.min(self.pos))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> 

Expected behavior

The code should pass.

Desktop (please complete the following information):

  • OS: Ubuntu
  • Python 3.11.2
  • cspy == 1.0.3
  • numpy == 1.24.2
  • networkx == 3.0

Additional context

Example fails with Python3.10 as well.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions