3

networkxおよびSimPyから継承するPython パッケージComplexNetworkSimを使用して、メッセージがネットワーク内で伝播する方法のエージェントベースのモデルをシミュレートしようとしています。

これが私のコードです:

from ComplexNetworkSim import NetworkSimulation, NetworkAgent, Sim
import networkx as nx

#define constants for our example of states
NO_MESSAGE = 0 
MESSAGE = 1

class Message(object):
    def __init__(self,topic_pref):
        self.relevance = topic_pref

class myAgent(NetworkAgent):
    def __init__(self, state, initialiser):
        NetworkAgent.__init__(self, state, initialiser)
        self.state = MESSAGE
        self.topic_pref = 0.5

    def Run(self):
        while True:
            if self.state == MESSAGE:
                self.message = self.Message(topic_pref, self, TIMESTEP)
                yield Sim.hold, self, NetworkAgent.TIMESTEP_DEFAULT
            elif self.state == NO_MESSAGE:
                yield Sim.hold, self, NetworkAgent.TIMESTEP_DEFAULT

# Network and initial states of agents
nodes = 30 

G = nx.scale_free_graph(nodes)
states = [MESSAGE for n in G.nodes()]  

# Simulation constants
MAX_SIMULATION_TIME = 25.0
TRIALS = 2

def main():
    directory = 'test' #output directory

    # run simulation with parameters
    # - complex network structure
    # - initial state list
    # - agent behaviour class
    # - output directory
    # - maximum simulation time
    # - number of trials
    simulation = NetworkSimulation(G,
                                   states,
                                   myAgent,
                                   directory,
                                   MAX_SIMULATION_TIME,
                                   TRIALS)
    simulation.runSimulation()

if __name__ == '__main__':
    main()

(このコードの下流には他の問題がある可能性があり、完全にはテストされていません。)

私の問題は、 myAgent オブジェクトがメソッド Run as an attribute を適切に呼び出していないことです。具体的には、上記のコードを実行しようとしたときに表示されるエラー メッセージは次のとおりです。

Starting simulations...
---Trial 0 ---
set up agents...
Traceback (most recent call last):
  File "simmessage.py", line 55, in <module>
    main()
  File "simmessage.py", line 52, in main
    simulation.runSimulation()
  File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/ComplexNetworkSim-0.1.2-py2.7.egg/ComplexNetworkSim/simulation.py", line 71, in runSimulation
    self.runTrial(i)
  File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/ComplexNetworkSim-0.1.2-py2.7.egg/ComplexNetworkSim/simulation.py", line 88, in runTrial
    self.activate(agent, agent.Run())            
AttributeError: 'myAgent' object has no attribute 'Run'

これがなぜなのか誰か知っていますか?私のコードがComplexNetworkSimの例とどのように大きく異なるのかわかりません。

4

1 に答える 1

1

自分のマシンでコードを実行すると、Run メソッドが呼び出されます。

私の最善の推測は、Paulo Scardine が書いたものですが、問題を再現できないため、実際にデバッグすることはできません。

于 2012-11-15T07:48:42.670 に答える