UnaryCounterは、次の制約関数のリスト要素としてのみ使用可能な制約補助関数です。

制約関数 使用部
SeqError List
SoftLinearComp   ListA,ListB



呼び出し書式は、以下です。

■sc3.UnaryCounter(bitstart,bit_interval,List)

です。

UnaryCounterとは、1進加算器のことであり、ビットの桁数は、入力の個数だけあります。

つまり桁上がりがないカウンタになります。

ビットスタート0、ビットインターバル1だと、そのままの出力になります。 ビットインターバル2だと、一つ飛びに出力されます。/2(割り算の2)のイメージです。

ビットスタートは、mod演算に対応します。下図は、bit interval=2のときの様子ですが、

同じbit interval=2でも、bitstartによって、エンコードの様子が異なります。

余りがないときは、どちらも同じですが、一人のときを1人と数えるか0人と数えるかの違いがあります。どちらのエンコードを指定するかは、bit_startを指定すれば決まります。

次のサンプルソースでは、新人二人で一人にカウントし、合計で10人となるように制約しています。

import sc3


for day in 今月:
    list新人=[]
    list指導者=[]
    for person in 全スタッフ:
        if person in 新人:
            v=sc3.GetShiftVar(person,day,'日勤')
            list新人.append(v)
        elif person in 指導者:
            v=sc3.GetShiftVar(person,day,'日勤')
            list指導者.append(v)
    s='UnaryCounter '+daydef[day]
    list=[]
    list.append(sc3.UnaryCounter(0,2,list新人))
    list.extend(list指導者)

    allowable_errors=3
    sc3.AddSoft(sc3.SeqError(10,10,allowable_errors,list),s,5)



bitstart=0なので、新人一人のときは、1人とカウントしています。