0

ネットワーク内では、情報 (パッケージ) をさまざまなノード (ホスト) に渡すことができます。その内容を変更することで、さまざまな意味を持つことができます。最終的なパッケージは、ネットワークの指定されたルートを介して入力されたホストに依存します。

ここで、計算ネットワーク モデルを実装して、異なる計算パスを指定することで小さなジョブを実行したいと考えています。

プロトタイプ:

def a(p): return p + 1
def b(p): return p + 2
def c(p): return p + 3
def d(p): return p + 4
def e(p): return p + 5


def link(p, r):
    p1 = p
    for x in r:
        p1 = x(p1)
    return p1

p = 100
route = [a,c,d]
result = link(p,result)
#========
target_result = 108
if result = target_result:
   # route is OK

最終的には次のようなものが必要だと思います:

  p with [init_payload, expected_target, passed_path, actual_calculated_result]
  |
  \/
 [CHAOS of possible of functions networks]
  |
  \/
  px [a,a,b,c,e]  # ok this path is ok and match the target 

これが私の質問です。あなたの助けが得られることを願っています:

  1. p関数と推定結果を調べて、ルートを運ぶ(決定する)ことができますか?</p >

    (1.1 ) たとえば、ルート上にノードがある場合x()

    def x(p): return x / 0 # I suppose it can pass the compile

    pどういうわけかこのパスが良くないことを知り、このパスを選択しないようにできますか?

    (1.2) もう 1 つの混乱は、pが自己定義のクラス型である場合、このクラス内のペイロードは本質的に文字列であり、パス [a,c,d] で運ぶ場合、int 型で must をp知ることができ、回避することです。a()このノードを選択しますか?'

  2. パス生成時の 1.2 と同じですが、このようなおっとを回避できますか?

    デフォルト a(p): p + 1 を返す

    def b(p): p + 2 を返す

    def x(p): p.append(1) を返す

    def y(p): p.append(2) を返す

    full_node_list = [a,b,x,y]

    path = random(2,full_node_list) # おっと x,y は int 型 P に、a,b は list 型に問題になります。パスが関数のラムダリストであるかどうかを考慮してください

追伸: モデル全体が私の頭ではあまり明確ではないので、指導や指示をいただければ幸いです。

ありがとう!

4

3 に答える 3

1

最初に一連のサンプル データを使用して各関数をテストできます。一貫して使用できない値を返す関数は破棄される可能性があります。

def isGoodFn(f):
    testData = [1,2,3,8,38,73,159]   # random test input
    goodEnough = 0.8 * len(testData)  # need 80% pass rate

    try:
        good = 0
        for i in testData:
            if type(f(i)) is int:
                good += 1
        return good >= goodEnough
    except:
        return False

関数が何をするかについて何も知らない場合は、悪い結果を破棄するために、基本的に各ノードでエラー チェックを使用して完全な幅優先ツリー検索を実行する必要があります。いくつかの関数がある場合、これはすぐに非常に大きくなります。一部の関数の動作を保証できれば、検索スペースを大幅に削減できる可能性がありますが、これはドメイン固有のものであり、問​​題に関するより正確な知識が必要です。

各結果が目的の結果からどれだけ離れているかをヒューリスティックに測定できる場合は、有向検索を実行して適切な答えをより迅速に見つけることができますが、そのようなヒューリスティックは、関数の全体的な形式を知ることに依存します (距離ヒューリスティックの乗法関数は、加法関数などの場合とは大きく異なります)。

于 2010-11-30T21:01:51.680 に答える
0

あなたがやろうとしていることについては多少混乱していますが、 p は関数を実行するまで関数を「知る」ことができません。設計上、Python 関数は操作対象のデータの型を指定しません。たとえばa*5、 a が文字列、リスト、整数、浮動小数点のいずれであっても有効です。

p で操作できない可能性のある関数がいくつかある場合は、たとえばリンク関数で例外をキャッチできます。

def link(p, r):
    try:
        for x in r:
            p = x(p)
    except ZeroDivisionError, AttributeError: # List whatever errors you want to catch
        return None
    return p
于 2010-11-30T12:04:14.850 に答える
0

関数がraise TypeError受け取るデータ型に満足していない場合、関数はそうすることができます。その後、この例外をキャッチして、適切な型を渡しているかどうかを確認できます。他の例外タイプをキャッチすることもできます。ただし、関数を呼び出して例外をキャッチしようとすると、非常に遅くなる可能性があります。

引数の型に応じて、関数をさまざまなセットに編成することもできます。

functions = { list : [some functions taking a list], int : [some functions taking an int]}

...
x = choose_function(functions[type(p)])
p = x(p)
于 2010-11-30T12:07:44.027 に答える