Prečo toto obmedzenie zvýšiť DCP Chyba?

0

Otázka

Som definovali problém, ktorý bude minimalizovať náklady na spustenie čerpadla. Ktorý je definovaný ako cieľ problém.

cost_cp = cp.sum(cp.multiply(cost_,selection))
objective = cp.Minimize(cost_cp)

Problém je definované:

problem = cp.Problem(objective, constraints)

Som bežal výpočty pomocou cp.multiply a cp.vec vypočítať rozdiel v nádrži zväzky, ktoré poskytuje moja odpoveď by som očakávať, že so správnym rozdiely.

flow_in = cp.vec(cp.multiply(input_flow_, flow_in_minutes))
flow_out = cp.vec(flow_out_)
flow_diff = flow_in - flow_out

Problém nastáva, keď som sa vypočíta je akumulačných súčtu pomocou cp.cumsum. Funguje to a vypočíta správne, ale keď chcem pridať obmedzenia v okolí tohto je mi poskytuje DCPError, Ja som si nie ste istí, kde som v poriadku, v takom výpočet, ako to fungovalo predtým žiadny problém pre mňa.

Obmedzenia, prial by som si, ak chcete definovať, sú:

volume_constraint = volume_cp >= 300000
min_level_constraint = res_level >= min_level
max_level_constraint = res_level <= max_level

constraints = [assignment_constraint, volume_constraint, min_level_constraint, max_level_constraint]

Na volume_constraint funguje perfektne. Problém je s min_level_constraint a max_level_constraint.

I pokus o riešenie pomocou

problem.solve(solver=cp.CPLEX, verbose=False)  

A traceback, v ktorom som poskytujeme, je:

DCPError                                  Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_14560/1602474026.py in <module>
     33 
     34 # Problem solve
---> 35 problem.solve(solver=cp.CPLEX, verbose=False)

~\AppData\Local\Programs\Python\Python38\lib\site-packages\cvxpy\problems\problem.py in solve(self, *args, **kwargs)
    457         else:
    458             solve_func = Problem._solve
--> 459         return solve_func(self, *args, **kwargs)
    460 
    461     @classmethod

~\AppData\Local\Programs\Python\Python38\lib\site-packages\cvxpy\problems\problem.py in _solve(self, solver, warm_start, verbose, gp, qcp, requires_grad, enforce_dpp, **kwargs)
    936                 return self.value
    937 
--> 938         data, solving_chain, inverse_data = self.get_problem_data(
    939             solver, gp, enforce_dpp, verbose)
    940 

~\AppData\Local\Programs\Python\Python38\lib\site-packages\cvxpy\problems\problem.py in get_problem_data(self, solver, gp, enforce_dpp, verbose)
    563         if key != self._cache.key:
    564             self._cache.invalidate()
--> 565             solving_chain = self._construct_chain(
    566                 solver=solver, gp=gp, enforce_dpp=enforce_dpp)
    567             self._cache.key = key

~\AppData\Local\Programs\Python\Python38\lib\site-packages\cvxpy\problems\problem.py in _construct_chain(self, solver, gp, enforce_dpp)
    789         candidate_solvers = self._find_candidate_solvers(solver=solver, gp=gp)
    790         self._sort_candidate_solvers(candidate_solvers)
--> 791         return construct_solving_chain(self, candidate_solvers, gp=gp,
    792                                        enforce_dpp=enforce_dpp)
    793 

~\AppData\Local\Programs\Python\Python38\lib\site-packages\cvxpy\reductions\solvers\solving_chain.py in construct_solving_chain(problem, candidates, gp, enforce_dpp)
    153     if len(problem.variables()) == 0:
    154         return SolvingChain(reductions=[ConstantSolver()])
--> 155     reductions = _reductions_for_problem_class(problem, candidates, gp)
    156 
    157     dpp_context = 'dcp' if not gp else 'dgp'

~\AppData\Local\Programs\Python\Python38\lib\site-packages\cvxpy\reductions\solvers\solving_chain.py in _reductions_for_problem_class(problem, candidates, gp)
     89             append += ("\nHowever, the problem does follow DQCP rules. "
     90                        "Consider calling solve() with `qcp=True`.")
---> 91         raise DCPError(
     92             "Problem does not follow DCP rules. Specifically:\n" + append)
     93     elif gp and not problem.is_dgp():

Díval som sa okolo dokumentáciu o CVXPY a na Pretečenie Zásobníka ale ja som nič nenašiel, v ktorom pracuje na môj problém. Som zmätený, ako to u mňa fungoval v minulosti.

1
2

Po niekoľkých hodinách extra prerokovanie a a práca na problém, bol som schopný zistiť dôvod.

Bolo to, ako som si myslel pôvodne a môj výpočet pre moje flow_in nebol DCP a nie som si úplne istý, alebo pochopiť, prečo, ale ja sa určite výučby sám tento čas ísť dopredu.

Bol som schopný upraviť výpočet vyzerať takto ak niekto prichádza cez niečo podobné v budúcnosti, a môžete vidieť, ako moje výpočty sa zmenilo v otázke verzus odpoveď.

flow_in = cp.sum(cp.multiply(volume_,selection),axis=1)
flow_out = cp.vec(flow_out_) # Value in litres -> must convert to a volume
flow_diff = (flow_in - flow_out) / 1000
res_level = cp.cumsum(flow_diff) / 160.6 + 2.3
2021-10-22 13:34:16

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................