avitevet/diet.cpp
# include algoritmus> |
# include iostream> |
# include vektor> |
# include cstdio> |
# include cassert> |
névtér használata std; |
typedef double ElementType; |
typedef vektor> mátrix; |
const int NO_MEGOLDÁS = - 1; |
const int BOUNDED_SOLUTION = 0; |
const int INFINITY_SOLUTION = 1; |
const ElementType C_THRESHOLD = 0,0000001; |
const ElementType DELTA_RATIO_THRESHOLD = 0; 0,0001; |
const ElementType DELTA_COMPARE_EPSILON = 0,0000001; |
// megvalósítja a CLRS PIVOT-ját |
void pivot ( |
vektor int> & nonbasics, |
vektor int> & alapok, |
mátrix & A, |
vektor & b, |
vektor stb, |
ElementType & v, |
int l, |
int e) |
// a CLRS-ben ez N - |
vektor int> egyébNem alapok; |
for (int n: nem alapismeretek) |
ha (n! = e) |
egyébNonbasics. visszalépés (n); |
> |
> |
// az e & l változók megadják a belépő és kilépő változók indexeit, de |
// nem azonosak az A sorban feldolgozandó sorral. A row_l biztosítja ezt a leképezést |
// (más néven, az A sora, amely jelenleg az x [l] alapváltozót képviseli) |
int sor_l = - 1; |
for (méret_t i = 0; i méret (); ++ i) |
if (alapok [i] == l) |
sor_l = i; |
szünet; |
> |
> |
// kiszámítja az x [e] új alapváltozó egyenletének együtthatóit. |
// más szóval, megoldjuk x [e] -re az l által indexelt kényszert. |
// ehhez a korlátozást úgy méretezzük, hogy elosztjuk A [l] [e] -vel, amely meghatározza az együtthatót |
// A-ban az l korlátozásban x [e] esetén 1,0-ig, és hatékonyan megoldja azt |
b [row_l] = b [row_l]/A [row_l] [e]; |
for (int j: egyéb alapismeretek) |
A [row_l] [j] = A [row_l] [j]/A [row_l] [e]; |
> |
A [sor_l] [l] = 1,0/A [sor_l] [e]; |
A [sor_l] [e] = 0,0; |
// kiszámítja a fennmaradó korlátok együtthatóit. |
// Valójában ez frissíti az l által nem indexelt korlátozásokat |
// úgy, hogy az x [e] egyenlet RHS-jét minden korlátba behelyettesítjük |
// x [e] minden előfordulásakor |
for (méret_t i = 0; i méret (); ++ i) |
ha (i == sor_l) |
folytatni; |
> |
b [i] - = A [i] [e] * b [sor_l]; |
for (int j: egyéb alapismeretek) |
A [i] [j] - = A [i] [e] * A [sor_l] [j]; |
> |
A [i] [l] = -A [i] [e] * A [sor_l] [l]; |
A [i] [e] = 0,0; |
> |
// kiszámítja az objektív függvényt |
// az l korlátozás helyettesítésével (megoldva x [e] -re) |
v + = c [e] * b [sor_l]; |
for (int j: egyéb alapismeretek) |
c [j] - = c [e] * A [sor_l] [j]; |
> |
c [l] = -c [e] * A [sor_l] [l]; |
c [e] = 0,0; |
// az e & l felcserélésével kiszámítja az alapvető és nem alapvető változók új halmazait |
for (méret_t n = 0; n méret (); ++ n) |
if (nem alapok [n] == e) |
nem alapok [n] = l; |
szünet; |
> |
> |
for (méret_t n = 0; n méret (); ++ n) |
if (alapok [n] == l) |
alapok [n] = e; |
szünet; |
> |
> |
Visszatérés; |
> |
typedef struct SlackForm |
vektor int> nem alapok, alapok; |
A mátrix; |
b, c vektor; |
ElementType v; |
> SlackForm; |
sablon typename T> |
std: ostream és operátor const vektor & v) |
ki " < "; |
for (méret_t i = 0; i méret (); ++ i) |
ki, ha (i! = v. méret () - 1) |
ki ","; |
> |
> |
ki ">"; |
visszatérés; |
> |
std: ostream & operátor "N =" nem alapok "B =" alapok "A = < "; |
for (vektor és sor: s. A) |
ki ">" "b =" b "c =" c "v =" v tér vissza; |
> |
pár int, vektor> SimplexIterations (SlackForm & slack) |
vektor int> |
& nonbasics = laza. nem alapismeretek, |
& alapok = laza. alapok; |
mátrix & A = laza. A; |
vektor |
& b = laza. b, |
& c = laza. c; |
ElementType & v = laza. v; |
// ez megvalósítja a CLRS SIMPLEX 2–17. sorát |
vektor delta (alapok. méret (), std: numeric_limits: végtelen ()); |
for (vektor: iterátor j = std: max_element (c. kezdet (), c. end ()); |
* j> C_THRESHOLD; |
j = std: max_element (c. kezdet (), c. vég ())) |
int e = std: távolság (c. kezdődik (), j); |
// válassza az l értéket, a változó indexét, amely a kilépő változó lesz. |
// ezt úgy teheti meg, hogy megnézi, melyik korlátozás engedélyezi a legnagyobb értéket |
// x [e], miközben nem sérti az x negatív jellegű korlátozásait |
for (méret_t i = 0; i méret (); ++ i) |
delta [i] = (A [i] [e]> DELTA_RATIO_THRESHOLD)? b [i]/A [i] [e]: std: numerikus_korlátok: végtelen (); |
> |
// most keresse meg a "legkisebb" deltát, de van egy fudge tényező a "kapcsolatok" számára. Ha delta [i] = |
Jelenleg nem hajthatja végre ezt a műveletet.
Egy másik füllel vagy ablakkal jelentkezett be. Töltse be újra a munkamenet frissítéséhez. Kijelentkezett egy másik fülön vagy ablakban. Töltse be újra a munkamenet frissítéséhez.
- Milyen ételeket fogyasztanak a japán étrend USA-ban
- A zónás étrend teljes 30 ételrel Crossfit mentve
- Milyen ételeket fogyasszon a The Beauty Diet Well Good-nál
- Milyen ételeket fogyasszon a The Beauty Diet Well Good-nál
- A nagy hajú diéta legjobb ételei erős, egészséges hajcsábításra