Esempio n. 1
0
            Result.append(mass[i_use2][j])
    return Result
def get_or_on_neigh(neigh):
    if len(neigh) == 2:
        return (mdl.equal(neigh[0],0) | mdl.equal(neigh[1],0))
    elif len(neigh) == 3:
        return (mdl.equal(neigh[0],0) | mdl.equal(neigh[1],0) | mdl.equal(neigh[2],0))
    elif len(neigh) == 4:
        return (mdl.equal(neigh[0],0) | mdl.equal(neigh[1],0) | mdl.equal(neigh[2],0) | mdl.equal(neigh[3],0))
    else:
       raise IndexError('Что-то пошло не так') 
        
for i in range(SIZE_X):
    for j in range(SIZE_Y):
        neigh = get_neigh(mass_v,  i, j)
        expr = mdl.if_then(mdl.equal(mass_v[i][j],1), get_or_on_neigh(neigh))
        mdl.add(expr)
        
def get_neighbours_with_checked(mass, i, j, checked):
    Y_SIZE = len(mass[0])
    X_SIZE = len(mass)
    Result = []
    i_use1 = i + 1
    j_use1 = j + 1
    i_use2 = i - 1
    j_use2 = j - 1
    if i - 1 < 0:
        i_use2 = i + 1  
    if i + 1 >= X_SIZE:
        i_use1 = i - 1 
    if j + 1 >= Y_SIZE:
Esempio n. 2
0
for i,c in enumerate(checked):
    if i ==2:
        mdl.add(mdl.start_before_start(compositions[c[1]],compositions[c[0]]))
    else:
        mdl.add(mdl.start_before_start(compositions[c[0]],compositions[c[1]]))
ENDS = []
STARTS = []
WAITNESS=[]
for k in range(numplayers):
    for j in range(numcompositions):
        print(players_compositions[k][j])
        #print(mdl.name_of(songs[k][j]))
        ENDS.append(mdl.end_of(compositions[j])*players_compositions[k][j])
        #STARTS.append(mdl.sum([mdl.times(mdl.start_of(songs[k][j] ),mdl.sum([100*mdl.equal(players_compositions[k][j],0),players_compositions[k][j]]) ), 100*mdl.times(mdl.equal(mdl.start_of(songs[k][j]),0),mdl.equal(players_compositions[k][j],0))]))
        STARTS.append(mdl.times(mdl.start_of(compositions[j] ),1000*mdl.equal(players_compositions[k][j],0)+ players_compositions[k][j]))
    MAX=mdl.max(ENDS)
    MIN=mdl.min(STARTS)
    print(-sum([waittimes[i]*players_compositions[k][i] for i in range(numcompositions)]))
    WAITNESS.append(mdl.sum([MAX,-MIN,-sum([waittimes[i]*players_compositions[k][i] for i in range(numcompositions)])]))
EXPR=mdl.sum(WAITNESS)
    
    
#mdl.add(mdl.minimize(EXPR))
mdl.add(mdl.minimize(mdl.sum([*[ mdl.max([ mdl.end_of(compositions[i])*players_compositions[k][i] for i in range(numcompositions)]) for k in range (numplayers)],
                              *[-mdl.min([mdl.times(mdl.start_of(compositions[j]),1000*mdl.equal(players_compositions[k][j],0)+ players_compositions[k][j]) + 100*mdl.times(mdl.equal(mdl.start_of(compositions[j]),0),mdl.equal(players_compositions[k][j],0)) for j in range(numcompositions)]) for k in range (numplayers)],
                              -92])))
        #[mdl.max(ENDS) for k in range(numplayers)]
        

mdl.write_information()
Esempio n. 3
0
workers.update(workers3)
deliveryworker = {
    "deliveryworker":
    mdl.sequence_var([itvs[(h, 2)] for h in range(numdetails)],
                     types=[h for h in range(numdetails)],
                     name="deliveryworker")
}
workers.update(deliveryworker)
for w in WorkerNames:
    mdl.add(mdl.no_overlap(workers[w]))
mdl.add(
    mdl.minimize(
        mdl.sum(euro_penalty[i] * mdl.float_div(
            mdl.max([mdl.end_of(itvs[(i, 2)]) - 480, 0]),
            mdl.end_of(itvs[(i, 2)]) - 480 +
            mdl.equal(mdl.end_of(itvs[(i, 2)]) - 480, 0))
                for i in range(numdetails))))
#mdl.add(mdl.minimize(mdl.sum(euro_penalty[i] * mdl.float_div(mdl.max([mdl.end_of(itvs[(i, 2)]) - 480, 0]),mdl.max([mdl.end_of(itvs[(i, 2)]) - 480)) for i in range(numdetails)))))

#mdl.add(mdl.minimize(mdl.sum(euro_penalty[i] * mdl.max([mdl.step_at(mdl.end_of(itvs[(i, 2)]) - 480,1), 0]) for i in range(numdetails))))

#mdl.add(mdl.minimize(mdl.sum(euro_penalty[i] * mdl.float_div(mdl.max([mdl.exponent(mdl.end_of(itvs[(i, 2)]) - 480)-1, 0]), mdl.exponent(mdl.end_of(itvs[(i, 2)]) - 480)) for i in range(numdetails))))
#mdl.add(mdl.minimize(mdl.sum(euro_penalty[i] * mdl.float_div(mdl.max([mdl.exponent(mdl.power(mdl.end_of(itvs[(i, 2)]) - 480, 0.33))-1, 0]), mdl.exponent(mdl.power(mdl.end_of(itvs[(i, 2)]) - 480, 0.33))) for i in range(numdetails))))

#mdl.add(mdl.minimize(mdl.sum(euro_penalty[i] * mdl.presence_of(itvs[(i, 2)]) for i in range(numdetails))))
print("Solving model....")
msol = mdl.solve(FailLimit=100000, TimeLimit=10)
print("Solution: ")
msol.print_solution()