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)
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)
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)