package inventory; /** * * Алгоритм, моделирующий торговлю сохраняемым товаром. * * В представленном алгоритме содержатся две ошибки! * Кроме того, содержатся ошибки как в формуле для наилучшего размера дневного запаса, * так и в представленной в конце формуле прибыли! * * Created on 2022-03-18 14:56:09. * @author Alexander Mikhailovich Kovshov */ public class RandomDemandStore { public static void main(String[] args) { System.out.println("Hello!"); double x; // дневной запас товара double p = 300; // отпускная цена double q = 200; // закупочная цена double r = 100; // затраты на хранение ночью double a = 2; // наименьшай спрос double b = 10; // наибольший спрос int n = 10000000; // число дней в численном опыте for (x = a; x <= b; x += 1) { //Повторения для разного размера дневного запаса. process(x, p, q, r, a, b, n); //Статистческое вычисление среднедневной прибыли. } x = b - (q / p) * (b - a) / 2; //формула неправильная! System.out.println("максимум при х: " + x); process(x, p, q, r, a, b, n); } /** * Симуляция торговли со случайным спросом несохраняемого товара. * В алгоритме метода присутствуют две ошибки! * @param x – дневной заказ * @param p – отпускная цена * @param q – закупочная цена * @param r – затраты на хранение ночью * @param a – наименьшай спрос * @param b – наибольший спрос * @param n - число дней в численном опыте. */ public static void process(double x, double p, double q, double r, double a, double b, int n) { double profit = 0; //Прибыль. Начальное значение нулевое. double z = 0; //Дневной остаток. Начальное значение нулевое. for (int i = 0; i < n; i++) { //Многократное повторение торговых дней. double y = Math.random() * (b - a); //Равномерный случайный спрос заданного разброса. y += a; //Смещение значения спроса к левой границе. profit += -q * (x - z); //Вычет из прибыли затрат на закупку пополнения дневного запаса. if (y < x) { //Если спрос оказался меньше заказа, profit += p * y; //то прибыль увеличивается на выручку от удовлетворения спроса, z = x - y; //вычисляется сохраняемый остаток товара, profit -= r * z; //и из прибыли вычитаются затраты на хранение. } else { //Если спрос меньше заказа, profit += p * x; //то прибыль увеличивается на выручку от проданного запаса без остатка. } } profit /= n; //Средняя прибыль за торговый день. double h; h = -q * (x - (x-a)/2) + p * x * (b - x) / (b - a) + (p * (a + x) / 2 - r) * (x - a) / (b - a); //формула неправильная! System.out.println("x: " + x + "; среднедневная прибыль: " + profit + "; по формуле: " + h); } }