2

if フロー制御を使用して関数を作成しましたが、それについていくつか疑問に思っています。

class Supplier(Process):

    def weeklySupply(self):
        global D1Vals
        xMeet = D1Vals[0]
        lead = 0
        capac = 150.0
        supply = 0
        if stocked.amount >= 15000:
            supply = 0
            yield put, self, stocked, supply
            S1Vals.append(0)
        elif supply >= capac:
            supply = capac
            yield put, self, stocked, supply
            S1Vals.append(capac)
        else:
            supply = random.triangular(.70 * xMeet , xMeet , xMeet * 1.05)
            yield put, self, stocked, supply
            print ('Week:'+'%6.0f:Supplied: %6.0f units. CurSupply = %6.0f' %
                   (now() + 1., supply, stocked.amount))
            yield hold, self, lead
            S1Vals.append(supply)
            del D1Vals[0]

私がコード化したのは次のとおりです。

  • ストックされたオブジェクトの量が >= 15000 の場合、オブジェクトはゼロの供給を生成するか、事前定義された「capac」量よりも大きい供給値が生成された場合、供給値 = 「capac」です。

  • 上記のいずれにも当てはまらない場合、供給値はランダムな分布として生成されました。ただし、出力を取得すると、供給値は 'capac' 値の 150 を超えています。

フローのやり方を誤解していませんか?

4

2 に答える 2

1

if elif質問で行ったように、構成をある種のものと混同しないorでください。条件は、 条件がelifである場合にのみ評価されます。私が思うに、あなたが本当に欲しいのは:ifFalse

if stocked.amount >= 15000:
    if supply >= capac:
        supply = capac
        yield put, self, stocked, supply
        S1Vals.append(capac)
     else:
        supply = 0
        yield put, self, stocked, supply
        S1Vals.append(0)
else:
    supply = random.triangular(.70 * xMeet , xMeet , xMeet * 1.05)
    ...

ただし、これはsupply、関数の先頭で0で初期化されていない場合にのみ機能します。

于 2012-07-30T08:40:59.200 に答える
0

御馳走を働かせているようで、私が考えるべきいくつかの良いことです. 私が見ることができる唯一の問題は、S1Vals リストにゼロ供給が追加されなくなったことです。これは、出力グラフと、len(S1Vals) を実行したときに確認できます。最終的なコードはあなたの提案です:

if stocked.amount >= 15000:
        if supply >= capac:
            supply = capac
            S1Vals.append(capac)
            yield put, self, stocked, supply
        else: 
            supply = 0.0
            yield put, self, stocked, supply
            S1Vals.append(supply)
    else:
        supply = min(capac, random.triangular(.70 * xMeet , xMeet , xMeet * 1.05))
        yield put, self, stocked, supply
        print ('Week:'+'%6.0f:Supplied: %6.0f units. CurSupply = %6.0f' %
               (now() + 1., supply, stocked.amount))
        yield hold, self, lead
        S1Vals.append(supply)
        del D1Vals[0]

ここにたどり着くために、上記の MaxPower からのフローの提案を使用し、また min(supply,capac)を宣言しましたglobal supply。最後の問題はsupply = 0.0決して開始されないように見えますが、実際に開始する必要がありますか?

于 2012-07-30T09:59:00.133 に答える