feat: change wdwr project to meet requiremetns

This commit is contained in:
Krzysztof Rudnicki 2025-04-21 19:39:56 +02:00
parent 86a5ab4a18
commit 6d3b860f1f
2 changed files with 36 additions and 9 deletions

View File

@ -71,6 +71,10 @@ var produced {MONTHS, PRODUCTS} >= 0 integer;
var sold {MONTHS,PRODUCTS} >= 0 integer;
var totalSold {p in PRODUCTS} = sum {m in MONTHS} sold[m, p];
# Sprzedaz z podziałem na normalną (do 80% limitu rynku) i z obniżonym zyskiem (powyżej 80% limitu)
var salesNormal {m in MONTHS, p in PRODUCTS} >= 0 integer;
var salesDiscounted {m in MONTHS, p in PRODUCTS} >= 0 integer;
# Iloosc produktow przekazanych do magazynu w danym miesiacu
var stored {m in MONTHS, p in PRODUCTS} = produced[m, p] - sold[m, p];
@ -91,7 +95,10 @@ var totalStorageCost = sum {m in MONTHS} monthlyStorageCost[m];
# Zysk dla warto<EFBFBD>ci oczekiwanej
var expectedSalesProfit =
sum {p in PRODUCTS} totalSold[p]*expectedProfitPerUnit[p];
sum {m in MONTHS, p in PRODUCTS} (
salesNormal[m, p] * expectedProfitPerUnit[p] +
salesDiscounted[m, p] * 0.8 * expectedProfitPerUnit[p]
);
var expectedNetProfit =
expectedSalesProfit - totalStorageCost;
@ -100,6 +107,14 @@ var expectedNetProfit =
# Ograniczenia modelu #
#######################
# Podział sprzedaży na normalną i z obniżonym zyskiem
subject to TotalSales {m in MONTHS, p in PRODUCTS}:
sold[m, p] = salesNormal[m, p] + salesDiscounted[m, p];
# Ograniczenie normalnej sprzedaży do 80% limitu rynkowego
subject to NormalSalesLimit {m in MONTHS, p in PRODUCTS}:
salesNormal[m, p] <= 0.8 * salesMarketLimit[m, p];
# Ograniczenie rynkowe sprzedazy produktow
subject to SalesMarketLimit {m in MONTHS, p in PRODUCTS}:
sold[m, p] <= salesMarketLimit[m, p];
@ -108,9 +123,6 @@ subject to SalesLimit1 {p in PRODUCTS}:
sold[first(MONTHS), p] <= produced[first(MONTHS), p];
subject to SalesLimit2 {m in MONTHS, p in PRODUCTS: m != first(MONTHS)}:
sold[m, p] <= produced [m, p] + storage[m, p];
# Powiazanie sprzedazy produktu P4 ze sprzedaza produktow P1 i P2
subject to P4SalesConstraint {m in MONTHS}:
sold[m, "P4"] >= sold[m, "P1"] + sold[m, "P2"];
# Ograniczenie pojemno<EFBFBD>ci magazynowej
subject to StorageLimit {m in MONTHS, p in PRODUCTS}:
storage[m, p] <= storageLimit[p];

View File

@ -74,6 +74,10 @@ var produced {MONTHS, PRODUCTS} >= 0 integer;
var sold {MONTHS,PRODUCTS} >= 0 integer;
var totalSold {p in PRODUCTS} = sum {m in MONTHS} sold[m, p];
# Sprzedaz z podziałem na normalną (do 80% limitu rynku) i z obniżonym zyskiem (powyżej 80% limitu)
var salesNormal {m in MONTHS, p in PRODUCTS} >= 0 integer;
var salesDiscounted {m in MONTHS, p in PRODUCTS} >= 0 integer;
# Iloosc produktow przekazanych do magazynu w danym miesiacu
var stored {m in MONTHS, p in PRODUCTS} = produced[m, p] - sold[m, p];
@ -92,13 +96,19 @@ var totalStorageCost = sum {m in MONTHS} monthlyStorageCost[m];
# Zysk dla warto<EFBFBD>ci oczekiwanej
var expectedSalesProfit =
sum {p in PRODUCTS} totalSold[p]*expectedProfitPerUnit[p];
sum {m in MONTHS, p in PRODUCTS} (
salesNormal[m, p] * expectedProfitPerUnit[p] +
salesDiscounted[m, p] * 0.8 * expectedProfitPerUnit[p]
);
var expectedNetProfit =
expectedSalesProfit - totalStorageCost;
# Zysk w danym scenariuszu
var scenarioSalesProfit {s in SCENARIOS} =
sum {p in PRODUCTS} totalSold[p]*scenarioProfitPerUnit[s, p];
sum {m in MONTHS, p in PRODUCTS} (
salesNormal[m, p] * scenarioProfitPerUnit[s, p] +
salesDiscounted[m, p] * 0.8 * scenarioProfitPerUnit[s, p]
);
var scenarioNetProfit {s in SCENARIOS} =
scenarioSalesProfit[s] - totalStorageCost;
@ -130,6 +140,14 @@ var risk = maxDeviation;
# Ograniczenia modelu #
#######################
# Podział sprzedaży na normalną i z obniżonym zyskiem
subject to TotalSales {m in MONTHS, p in PRODUCTS}:
sold[m, p] = salesNormal[m, p] + salesDiscounted[m, p];
# Ograniczenie normalnej sprzedaży do 80% limitu rynkowego
subject to NormalSalesLimit {m in MONTHS, p in PRODUCTS}:
salesNormal[m, p] <= 0.8 * salesMarketLimit[m, p];
# Ograniczenie rynkowe sprzedazy produktow
subject to SalesMarketLimit {m in MONTHS, p in PRODUCTS}:
sold[m, p] <= salesMarketLimit[m, p];
@ -138,9 +156,6 @@ subject to SalesLimit1 {p in PRODUCTS}:
sold[first(MONTHS), p] <= produced[first(MONTHS), p];
subject to SalesLimit2 {m in MONTHS, p in PRODUCTS: m != first(MONTHS)}:
sold[m, p] <= produced [m, p] + storage[m, p];
# Powiazanie sprzedazy produktu P4 ze sprzedaza produktow P1 i P2
subject to P4SalesConstraint {m in MONTHS}:
sold[m, "P4"] >= sold[m, "P1"] + sold[m, "P2"];
# Ograniczenie pojemno<EFBFBD>ci magazynowej
subject to StorageLimit {m in MONTHS, p in PRODUCTS}:
storage[m, p] <= storageLimit[p];