Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- void print_params(map<string, double> ¶ms) {
- for (auto &arg : params) {
- cout << arg.first << " = " << arg.second << endl;
- }
- }
- int main() {
- double t_oj = 7;
- double t_obs = 6.5;
- double t_inQ = 0.6;
- double mu = 1 / t_obs;
- double lmbd = 1 / t_oj;
- double rho = lmbd / mu;
- double omega = 1 / t_inQ;
- double beta = omega / mu;
- cout << fixed << setprecision(6);
- cout << "mu = " << mu << endl;
- cout << "lmbd = " << lmbd << endl;
- cout << "omega = " << omega << endl;
- cout << "t_obs = " << t_obs << endl;
- cout << "t_oj = " << t_oj << endl;
- cout << "t_inQ = " << t_inQ << endl;
- cout << "rho = " << rho << endl;
- cout << "beta = " << beta << endl;
- int n = 1;
- cout << "n = " << n << endl;
- auto get_params_limited_waiting = [](int n, double mu, double lmbd, double beta, double rho) {
- map<string, double> params;
- vector<double> p(1, 0);
- for (int i = 0; i <= n; ++i) {
- p[0] += pow(rho, i) / tgamma(i + 1);
- }
- vector<double> denominators(1, n + beta);
- for (int i = 1; i < 10; ++i) {
- denominators.push_back(denominators[i - 1] * (n + i * beta));
- }
- double tmp = 0;
- for (int i = 0; i < 10; ++i) {
- tmp += pow(rho, i + 1) / denominators[i];
- }
- p[0] = pow(p[0] + pow(rho, n) / tgamma(n + 1) * tmp, -1);
- for (int i = 1; i <= n; ++i) {
- p.push_back(pow(rho, i) / tgamma(i + 1) * p[0]);
- }
- for (int i = 0; i < 10; ++i) {
- p.push_back(pow(rho, n) / tgamma(n + 1) * pow(rho, i + 1) / denominators[i] * p[0]);
- }
- params["p"] = p[0]; // Only storing the first p value
- double k = n;
- for (int i = 0; i <= n; ++i) {
- k -= (n - i) * p[i];
- }
- params["k"] = k;
- params["P_och"] = 1;
- for (int i = 0; i <= n; ++i) {
- params["P_och"] -= p[i];
- }
- params["P_ob"] = k / rho;
- params["P_otk"] = 0;
- params["P_syst"] = 1;
- params["Q"] = params["P_ob"];
- params["A"] = lmbd * params["Q"];
- params["L_ob"] = k;
- params["L_och"] = (rho - k) / beta;
- params["L_syst"] = params["L_ob"] + params["L_och"];
- params["P_uh"] = 1 - params["P_ob"];
- params["nu_uh"] = lmbd - mu * k;
- params["T_ob"] = params["L_ob"] / lmbd;
- params["T_och"] = params["L_och"] / lmbd;
- params["T_syst"] = params["L_syst"] / lmbd;
- return params;
- };
- print_params(get_params_limited_waiting(n, mu, lmbd, beta, rho));
- n = 3;
- cout << "n = " << n << endl;
- print_params(get_params_limited_waiting(n, mu, lmbd, beta, rho));
- n = 1;
- int i = 4;
- cout << "n = " << n << endl;
- cout << "i = " << i << endl;
- auto get_params_closed = [](int n, double mu, double lmbd, double rho, int i) {
- map<string, double> params;
- vector<double> p(1, 0);
- for (int k = 0; k <= n; ++k) {
- p[0] += tgamma(i + 1) / tgamma(i - k + 1) * pow(rho, k) / tgamma(k + 1);
- }
- for (int k = n + 1; k <= i; ++k) {
- p[0] += pow(rho, n) / tgamma(n + 1) * tgamma(i + 1) / tgamma(i - k + 1) * pow(rho, k - n) / pow(n, k - n);
- }
- p[0] = pow(p[0], -1);
- for (int k = 1; k <= n; ++k) {
- p.push_back(tgamma(i + 1) / tgamma(i - k + 1) * pow(rho, k) / tgamma(k + 1) * p[0]);
- }
- for (int k = n + 1; k <= i; ++k) {
- p.push_back(tgamma(i + 1) / tgamma(i - k + 1) * pow(rho, k) / (tgamma(n + 1) * pow(n, k - n)) * p[0]);
- }
- params["p"] = p[0]; // Only storing the first p value
- double k = n;
- for (int j = 0; j <= n; ++j) {
- k -= (n - j) * p[j];
- }
- params["k"] = k;
- params["P_och"] = 0;
- for (int j = n + 1; j <= i; ++j) {
- params["P_och"] += p[0] * pow(rho, n) / tgamma(n + 1) * tgamma(i + 1) / tgamma(i - j + 1) * pow(rho, j - n) / pow(n, j - n);
- }
- params["P_ob"] = 1;
- params["P_otk"] = 0;
- params["P_syst"] = 1;
- params["Q"] = 1;
- params["A"] = mu * k;
- params["L_ob"] = k;
- params["L_och"] = i - k * (1 / rho + 1);
- params["L_syst"] = params["L_ob"] + params["L_och"];
- params["N_akt"] = params["A"] / lmbd;
- params["N_pas"] = i - params["N_akt"];
- params["nu"] = params["A"];
- params["P_akt"] = params["N_akt"] / i;
- params["T_ob"] = params["L_ob"] / params["nu"];
- params["T_och"] = params["L_och"] / params["nu"];
- params["T_syst"] = params["L_syst"] / params["nu"];
- return params;
- };
- print_params(get_params_closed(n, mu, lmbd, rho, i));
- n = 3;
- cout << "n = " << n << endl;
- print_params(get_params_closed(n, mu, lmbd, rho, i));
- n = 4;
- cout << "n = " << n << endl;
- auto get_params_rejections = [](int n, double mu, double lmbd, double rho) {
- map<string, double> params;
- vector<double> p(1, 1);
- for (int i = 1; i <= n; ++i) {
- p[0] += pow(rho, i) / tgamma(i + 1);
- }
- p[0] = pow(p[0], -1);
- for (int i = 1; i <= n; ++i) {
- p.push_back(pow(rho, i) / tgamma(i + 1) * p[0]);
- }
- params["p"] = p[0];
- params["P_otk"] = p.back();
- params["Q"] = 1 - params["P_otk"];
- params["A"] = lmbd * params["Q"];
- params["k"] = params["A"] / mu;
- params["L_ob"] = params["A"] / mu;
- params["T_ob"] = params["L_ob"] / lmbd;
- return params;
- };
- auto get_params_rejections_plus = [](int n, double mu, double lmbd, double rho) {
- map<string, double> params;
- vector<double> p = {n / (rho + n), rho / (rho + n)};
- params["p+"] = p[0]; // Only storing the first p value
- params["P_otk+"] = p[1];
- params["Q+"] = 1 - params["P_otk+"];
- params["A+"] = lmbd * params["Q+"];
- params["k+"] = params["A+"] / mu;
- params["L_ob+"] = p[1];
- params["T_ob+"] = params["L_ob+"] / lmbd;
- return params;
- };
- print_params(get_params_rejections(n, mu, lmbd, rho));
- print_params(get_params_rejections_plus(n, mu, lmbd, rho));
- n = 3;
- double psi = rho / n;
- cout << "n = " << n << endl;
- cout << "psi = rho/n = " << psi << endl;
- auto get_params_endless_queue = [](int n, double mu, double lmbd, double rho) {
- map<string, double> params;
- vector<double> p(1, 1);
- for (int i = 1; i <= n; ++i) {
- p[0] += pow(rho, i) / tgamma(i + 1);
- }
- p[0] += pow(rho, n + 1) / (tgamma(n + 1) * (n - rho));
- p[0] = pow(p[0], -1);
- for (int i = 1; i <= n; ++i) {
- p.push_back(pow(rho, i) / tgamma(i + 1) * p[0]);
- }
- for (int i = 1; i < 150; ++i) {
- p.push_back(pow(rho, n + i) / (tgamma(n + 1) * pow(n, i)) * p[0]);
- }
- params["p"] = p[0]; // Only storing the first p value
- params["P_och"] = pow(rho, n + 1) * p[0] / (tgamma(n + 1) * (n - rho));
- params["P_otk"] = 0;
- params["Q"] = 1 - params["P_otk"];
- params["A"] = lmbd * params["Q"];
- params["k"] = params["A"] / mu;
- params["L_ob"] = params["A"] / mu;
- params["L_och"] = n * params["P_och"] / (n - rho);
- params["L_syst"] = params["L_ob"] + params["L_och"];
- params["T_ob"] = params["L_ob"] / lmbd;
- params["T_och"] = params["L_och"] / lmbd;
- params["T_syst"] = params["L_syst"] / lmbd;
- return params;
- };
- auto get_params_endless_queue_plus = [](int n, double lmbd, double rho, double psi) {
- map<string, double> params;
- vector<double> p = {1 - psi};
- for (int i = 1; i < 10; ++i) {
- p.push_back(pow(psi, i) * (1 - psi));
- }
- params["p+"] = p[0];
- params["P_och+"] = pow(psi, 2);
- params["P_otk+"] = 0;
- params["Q+"] = 1;
- params["A+"] = lmbd;
- params["k+"] = rho;
- params["L_ob+"] = psi;
- params["L_och+"] = pow(psi, 2) / (1 - psi);
- params["L_syst+"] = params["L_ob+"] + params["L_och+"];
- params["T_ob+"] = params["L_ob+"] / lmbd;
- params["T_och+"] = params["L_och+"] / lmbd;
- params["T_syst+"] = params["L_syst+"] / lmbd;
- return params;
- };
- print_params(get_params_endless_queue(n, mu, lmbd, rho));
- print_params(get_params_endless_queue_plus(n, lmbd, rho, psi));
- n = 2;
- int m = 4;
- psi = rho / n;
- cout << "n = " << n << endl;
- cout << "m = " << m << endl;
- cout << "psi = rho/n = " << psi << endl;
- auto get_params_limited_queue = [](int n, int m, double mu, double lmbd, double rho) {
- map<string, double> params;
- vector<double> p(1, 1);
- for (int i = 1; i <= n; ++i) {
- p[0] += pow(rho, i) / tgamma(i + 1);
- }
- p[0] += pow(rho, n + 1) * (1 - pow(rho / n, m)) / (tgamma(n + 1) * n * (1 - rho / n));
- p[0] = pow(p[0], -1);
- for (int i = 1; i <= n; ++i) {
- p.push_back(pow(rho, i) / tgamma(i + 1) * p[0]);
- }
- for (int i = 1; i <= m; ++i) {
- p.push_back(pow(rho, n + i) / (tgamma(n + 1) * pow(n, i)) * p[0]);
- }
- params["p"] = p[0]; // Only storing the first p value
- params["P_och"] = pow(rho, n + 1) * (1 - pow(rho / n, m)) / (tgamma(n + 1) * n * (1 - rho / n)) * p[0];
- params["P_otk"] = pow(rho, n + m) / (pow(n, m) * tgamma(n + 1)) * p[0];
- params["Q"] = 1 - params["P_otk"];
- params["A"] = lmbd * params["Q"];
- params["k"] = params["A"] / mu;
- params["L_ob"] = params["A"] / mu;
- params["L_och"] = pow(rho, n + 1) / (n * tgamma(n + 1)) * (1 - pow(rho / n, m) * (m + 1 - m * rho / n)) / pow(1 - rho / n, 2) * p[0];
- params["L_syst"] = params["L_ob"] + params["L_och"];
- params["T_ob"] = params["L_ob"] / lmbd;
- params["T_och"] = params["L_och"] / lmbd;
- params["T_syst"] = params["L_syst"] / lmbd;
- return params;
- };
- auto get_params_limited_queue_plus = [](int n, int m, double lmbd, double psi) {
- map<string, double> params;
- vector<double> p = {(1 - psi) / (1 - pow(psi, m + 2))};
- for (int i = 1; i <= m + 1; ++i) {
- p.push_back(pow(psi, i) * p[0]);
- }
- params["p+"] = p[0]; // Only storing the first p value
- params["P_och+"] = pow(psi, 2) * (1 - pow(psi, m)) / (1 - pow(psi, m + 2));
- params["P_otk+"] = pow(psi, m + 1) * (1 - psi) / (1 - pow(psi, m + 2));
- params["Q+"] = 1 - params["P_otk+"];
- params["A+"] = lmbd * params["Q+"];
- params["k+"] = n * psi * (1 - pow(psi, m + 1)) / (1 - pow(psi, m + 2));
- params["L_ob+"] = psi * params["Q+"];
- params["L_och+"] = pow(psi, 2) * (1 - pow(psi, m) * (m + 1 - m * psi)) / ((1 - pow(psi, m + 2)) * (1 - psi));
- params["L_syst+"] = params["L_ob+"] + params["L_och+"];
- params["T_ob+"] = params["L_ob+"] / lmbd;
- params["T_och+"] = params["L_och+"] / lmbd;
- params["T_syst+"] = params["L_syst+"] / lmbd;
- return params;
- };
- print_params(get_params_limited_queue(n, m, mu, lmbd, rho));
- print_params(get_params_limited_queue_plus(n, m, lmbd, psi));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement