Пример #1
0
def saveConstraints(dataTensor,variables,orderingNotImp,repeatDim,ind,num_nurses,direc,seed,tag):
    r=set([v for v in range(len(variables)) if v not in repeatDim])
    subsets=cf.split(r,(),repeatDim)
#    direc='/home/mohit/CLUT/code/data'
    with open(os.path.join(direc, "result_N"+str(num_nurses)+'_seed'+str(seed)+"_"+tag+".csv") ,"a") as my_csv:
        csvWriter = csv.writer(my_csv,delimiter=',')
        if ind==0:
            row=(['']*2)
            for subset in subsets:
                row.extend(subset)
                row.extend(['']*5)
            csvWriter.writerow(row)
        else:
            row=[]
            for l in range(len(subsets)):
                subset=subsets[l]
                newset=subset[0]+subset[1]
                # this value will be used to filter max constraints
                maxPossible=1
                for i in range(len(subset[1])):
                    maxPossible*=len(variables[subset[1][i]])   
                idTensor=cf.tensorIndicator(dataTensor,newset, variables)
                sumSet = range(len(subset[0]),len(newset))
                
                sumTensor_max,sumTensor_min=cf.tensorSum(idTensor,sumSet, np.array(variables)[list(newset)],0)
                if sumTensor_min != 0 and sumTensor_min!=maxPossible: 
                    row.extend([sumTensor_min])
                else:
                    row.extend([''])
                if sumTensor_max != maxPossible and sumTensor_max!=0: 
                    row.extend([sumTensor_max]) 
                else:
                    row.extend([''])
                if len(set(subset[1]))==1 and len(set(orderingNotImp) & set(subset[1]))==0:
#                    print(subset)
                    minConsZero,maxConsZero,minConsNonZero,maxConsNonZero = cf.tensorConsZero(idTensor,sumSet, np.array(variables)[list(newset)])
                    if minConsZero!=0 and minConsZero!=maxPossible:
                        row.extend([minConsZero])
                    else:
                        row.extend([''])
                    if maxConsZero!=maxPossible and maxConsZero>0:
                        row.extend([maxConsZero])
                    else:
                        row.extend([''])
                    if minConsNonZero!=0 and minConsNonZero!=maxPossible:
                        row.extend([minConsNonZero])
                    else:
                        row.extend([''])
                    if maxConsNonZero!=maxPossible and maxConsNonZero>0:
                        row.extend([maxConsNonZero])
                    else:
                        row.extend([''])
                else:
                    row.extend(['']*4)
                row.extend([''])
            csvWriter.writerow(row)
Пример #2
0
def findConstraints(dataTensor, variables, orderingNotImp, extraConstraints,
                    repeatDim):
    r = set([v for v in range(len(variables)) if v not in repeatDim])
    subsets = cf.split(r, (), repeatDim)
    for l in range(len(subsets)):
        subset = subsets[l]
        newset = subset[0] + subset[1]
        print(subset)
        print(newset)
        # this value will be used to filter max constraints
        maxPossible = 1
        for i in range(len(subset[1])):
            maxPossible *= len(variables[subset[1][i]])
        idTensor = cf.tensorIndicator(dataTensor, newset, variables)
        sumSet = range(len(subset[0]), len(newset))
        print(sumSet)
        if subset[0] in extraConstraints:
            sumTensor = cf.tensorSum(idTensor, sumSet,
                                     np.array(variables)[list(newset)], 1)
            print('M:', subset[0], ' S:', subset[1])
            print(sumTensor)
        else:
            sumTensor_max, sumTensor_min = cf.tensorSum(
                idTensor, sumSet,
                np.array(variables)[list(newset)], 0)
            if (sumTensor_min != 0 and sumTensor_min != maxPossible) or (
                    sumTensor_max != maxPossible and sumTensor_max != 0):
                print('M:', subset[0], ' S:', subset[1])
            if sumTensor_min != 0 and sumTensor_min != maxPossible:
                print('min: ', sumTensor_min)
            if sumTensor_max != maxPossible and sumTensor_max != 0:
                print('max: ', sumTensor_max)

        if len(set(
                subset[1])) == 1 and len(set(orderingNotImp)
                                         & set(subset[1])) == 0:
            minConsZero, maxConsZero, minConsNonZero, maxConsNonZero = cf.tensorConsZero(
                idTensor, sumSet,
                np.array(variables)[list(newset)])
            if (minConsZero != 0 and minConsZero != maxPossible
                ) or (maxConsZero != maxPossible and maxConsZero > 0) or (
                    minConsNonZero != 0 and minConsNonZero != maxPossible) or (
                        maxConsNonZero != maxPossible and maxConsNonZero > 0):
                print('M:', subset[0], ' S:', subset[1])
            if minConsZero != 0 and minConsZero != maxPossible:
                print('min cons Zero: ', minConsZero)
            if maxConsZero != maxPossible and maxConsZero > 0:
                print('max cons Zero: ', maxConsZero)
            if minConsNonZero != 0 and minConsNonZero != maxPossible:
                print('min cons NonZero: ', minConsNonZero)
            if maxConsNonZero != maxPossible and maxConsNonZero > 0:
                print('max cons NonZero: ', maxConsNonZero)
Пример #3
0
def saveConstraintsForAll(dataTensor, variables, orderingNotImp, ind,
                          num_nurses, directory, tag):
    repeatDim = ()
    r = set([v for v in range(len(variables)) if v not in repeatDim])
    subsets = cf.split(r, (), repeatDim)
    with open(
            os.path.join(directory + "/results",
                         "learnedBounds" + "_" + tag + ".csv"), "a") as my_csv:
        csvWriter = csv.writer(my_csv, delimiter=',')
        if ind == 0:
            row = ([''] * 2)
            for subset in subsets:
                row.extend(subset)
                row.extend([''] * 5)
            csvWriter.writerow(row)
        else:
            row = []
            for l in range(len(subsets)):
                subset = subsets[l]
                newset = subset[0] + subset[1]
                # this value will be used to filter max constraints
                maxPossible = 1
                for i in range(len(subset[1])):
                    maxPossible *= len(variables[subset[1][i]])
                idTensor = cf.tensorIndicator(dataTensor, newset, variables)
                sumSet = range(len(subset[0]), len(newset))

                sumTensor_max, sumTensor_min = cf.tensorSum(
                    idTensor, sumSet,
                    np.array(variables)[list(newset)], 0)
                row.extend([sumTensor_min])
                row.extend([sumTensor_max])
                #                if sumTensor_min==maxPossible:
                #                    row.extend([0])
                #                else:
                #                    row.extend([sumTensor_min])

                #                if sumTensor_max==maxPossible:
                #                    row.extend([0])
                #                else:
                #                    row.extend([sumTensor_max])
                if len(set(subset[1])) == 1 and len(
                        set(orderingNotImp) & set(subset[1])) == 0:
                    minConsZero, maxConsZero, minConsNonZero, maxConsNonZero = cf.tensorConsZero(
                        idTensor, sumSet,
                        np.array(variables)[list(newset)])
                    row.extend([minConsZero])
                    row.extend([maxConsZero])
                    #                    if minConsZero==maxPossible:
                    #                        row.extend([0])
                    #                    else:
                    #                        row.extend([minConsZero])

                    #                    if maxConsZero==maxPossible:
                    #                        row.extend([0])
                    #                    else:
                    #                        row.extend([maxConsZero])
                    #                    row.extend([maxConsZero])
                    row.extend([minConsNonZero])
                    row.extend([maxConsNonZero])


#                    if minConsNonZero==maxPossible:
#                        row.extend([0])
#                    else:
#                        row.extend([minConsNonZero])

#                    if maxConsNonZero==maxPossible:
#                        row.extend([0])
#                    else:
#                        row.extend([maxConsNonZero])
#                    row.extend([maxConsNonZero])

                else:
                    row.extend([''] * 4)
                row.extend([''])
            csvWriter.writerow(row)