# جدول2.4 library(dplyr) library(tidyr) library(ggplot2) # تابع محاسبه هزینه بهینه برای سیستم موازی calculate_optimal_replacement <- function(p, c1, c2 = 1000) { # محاسبه پارامترهای توزیع q <- 1 - p a1 <- p^2 a2 <- p^2 - p^3 b1 <- (1-p)*(2-p) - 2 b2 <- (1-p)^3 # بررسی شرط بهینگی threshold <- (p * (2-p) / (3 - 2*p)) * (c1 / (c1 - c2)) if (p <= threshold) { # وقتی تعویض پیشگیرانه بهینه نیست mean_lifetime <- 1/p + 1/p - 1/(2*p - p^2) # میانگین عمر سیستم موازی return(list(n_star = Inf, cost = c1 / mean_lifetime)) } # محدوده جستجوی n n_values <- 1:100 costs <- numeric(length(n_values)) # محاسبه هزینه برای هر n for (i in seq_along(n_values)) { n <- n_values[i] # محاسبه P(X > n) برای توزیع ماکسیمم survival_n <- 2*(1-p)^n - (1-p)^(2*n) # محاسبه E(min(X, n)) = Σ_{i=0}^{n-1} P(X > i) expected_min <- 0 for (j in 0:(n-1)) { survival_j <- 2*(1-p)^j - (1-p)^(2*j) expected_min <- expected_min + survival_j } # محاسبه هزینه C(n) if (expected_min > 0) { costs[i] <- (c1 + (c2 - c1) * survival_n) / expected_min } else { costs[i] <- Inf } } # یافتن مقدار بهینه optimal_idx <- which.min(costs) n_star <- n_values[optimal_idx] optimal_cost <- costs[optimal_idx] return(list(n_star = n_star, cost = optimal_cost)) } # تابع تولید جدول کامل generate_table_24 <- function() { # مقادیر پارامترها p_values <- c(0.1, 0.2) c1_values <- c(3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000) # ایجاد داده های جدول results <- data.frame() for (p in p_values) { for (c1 in c1_values) { # محاسبه مقادیر بهینه result <- calculate_optimal_replacement(p, c1) # ذخیره نتایج results <- rbind(results, data.frame( p = p, c1 = c1, n_star = result$n_star, cost = round(result$cost, 4) )) } } # فرمت دهی نتایج برای نمایش table_data <- pivot_wider(results, names_from = p, values_from = c(n_star, cost), names_glue = "{.value}_p{p}") %>% select(c1, n_star_p0.1, cost_p0.1, n_star_p0.2, cost_p0.2) return(list(raw_data = results, table = table_data)) } # اجرای محاسبات و تولید جدول set.seed(123) # برای reproducible results table_results <- generate_table_24() # نمایش نتایج cat("جدول ۲۴ - مقادیر بهینه برای سیستم موازی\n") cat("=============================================\n") print(table_results$table) # نمایش داده های خام برای بررسی cat("\nداده های خام:\n") cat("=============================================\n") print(table_results$raw_data) # ذخیره نتایج در فایل CSV write.csv(table_results$table, "table_24_results.csv", row.names = FALSE) write.csv(table_results$raw_data, "table_24_raw_data.csv", row.names = FALSE) cat("\nمحاسبات completed! فایل های زیر ایجاد شدند:\n") cat("1. table_24_results.csv - جدول نهایی\n") cat("2. table_24_raw_data.csv - داده های خام\n") #نمودار # بارگذاری کتابخانه های مورد نیاز if (!require(dplyr)) install.packages("dplyr") if (!require(tidyr)) install.packages("tidyr") if (!require(ggplot2)) install.packages("ggplot2") if (!require(gridExtra)) install.packages("gridExtra") library(dplyr) library(tidyr) library(ggplot2) library(gridExtra) # تابع محاسبه هزینه بهینه برای سیستم موازی calculate_optimal_replacement <- function(p, c1, c2 = 1000) { # محاسبه پارامترهای توزیع q <- 1 - p a1 <- p^2 a2 <- p^2 - p^3 b1 <- (1-p)*(2-p) - 2 b2 <- (1-p)^3 # بررسی شرط بهینگی threshold <- (p * (2-p) / (3 - 2*p)) * (c1 / (c1 - c2)) if (p <= threshold) { # وقتی تعویض پیشگیرانه بهینه نیست mean_lifetime <- 1/p + 1/p - 1/(2*p - p^2) # میانگین عمر سیستم موازی return(list(n_star = Inf, cost = c1 / mean_lifetime)) } # محدوده جستجوی n n_values <- 1:100 costs <- numeric(length(n_values)) # محاسبه هزینه برای هر n for (i in seq_along(n_values)) { n <- n_values[i] # محاسبه P(X > n) برای توزیع ماکسیمم survival_n <- 2*(1-p)^n - (1-p)^(2*n) # محاسبه E(min(X, n)) = Σ_{i=0}^{n-1} P(X > i) expected_min <- 0 for (j in 0:(n-1)) { survival_j <- 2*(1-p)^j - (1-p)^(2*j) expected_min <- expected_min + survival_j } # محاسبه هزینه C(n) if (expected_min > 0) { costs[i] <- (c1 + (c2 - c1) * survival_n) / expected_min } else { costs[i] <- Inf } } # یافتن مقدار بهینه optimal_idx <- which.min(costs) n_star <- n_values[optimal_idx] optimal_cost <- costs[optimal_idx] return(list(n_star = n_star, cost = optimal_cost)) } # تابع تولید جدول کامل generate_table_24 <- function() { # مقادیر پارامترها p_values <- c(0.1, 0.2) c1_values <- c(3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000) # ایجاد داده های جدول results <- data.frame() for (p in p_values) { for (c1 in c1_values) { # محاسبه مقادیر بهینه result <- calculate_optimal_replacement(p, c1) # ذخیره نتایج results <- rbind(results, data.frame( p = p, c1 = c1, n_star = result$n_star, cost = round(result$cost, 4) )) } } return(results) } # اجرای محاسبات و تولید جدول set.seed(123) results <- generate_table_24() # ایجاد نمودارها plot1 <- ggplot(results, aes(x = c1, y = n_star, color = as.factor(p), group = as.factor(p))) + geom_line(size = 1.5) + geom_point(size = 3) + labs(title = "تاثیر هزینه تعویض پیشگیرانه بر تعداد بهینه تعویض", x = "هزینه تعویض پیشگیرانه (c₁)", y = "تعداد بهینه تعویض (N*)", color = "مقدار p") + theme_minimal() + theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12), legend.position = "bottom") + scale_color_manual(values = c("0.1" = "#E41A1C", "0.2" = "#377EB8")) + scale_x_continuous(breaks = seq(3000, 10000, 1000)) + scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) plot2 <- ggplot(results, aes(x = c1, y = cost, color = as.factor(p), group = as.factor(p))) + geom_line(size = 1.5) + geom_point(size = 3) + labs(title = "تاثیر هزینه تعویض پیشگیرانه بر هزینه بهینه", x = "هزینه تعویض پیشگیرانه (c₁)", y = "هزینه بهینه (C(N*))", color = "مقدار p") + theme_minimal() + theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12), legend.position = "bottom") + scale_color_manual(values = c("0.1" = "#E41A1C", "0.2" = "#377EB8")) + scale_x_continuous(breaks = seq(3000, 10000, 1000)) + scale_y_continuous(labels = scales::comma) print(plot1) print(plot2) # ذخیره نمودار تعداد بهینه تعویض ggsave("fig/optimal_replacement_number.png", plot = plot1, width = 8, height = 5, dpi = 300) # ذخیره نمودار هزینه بهینه ggsave("fig/optimal_replacement_cost.png", plot = plot2, width = 8, height = 5, dpi = 300)
An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in  on line 0. in /var/www/html/prof-homepages/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/prof-homepages/vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
#1 /var/www/html/prof-homepages/vendor/yiisoft/yii2/web/ErrorHandler.php(136): yii\web\Response->send()
#2 /var/www/html/prof-homepages/vendor/yiisoft/yii2/base/ErrorHandler.php(135): yii\web\ErrorHandler->renderException()
#3 [internal function]: yii\base\ErrorHandler->handleException()
#4 {main}
Previous exception:
yii\web\HeadersAlreadySentException: Headers already sent in  on line 0. in /var/www/html/prof-homepages/vendor/yiisoft/yii2/web/Response.php:366
Stack trace:
#0 /var/www/html/prof-homepages/vendor/yiisoft/yii2/web/Response.php(339): yii\web\Response->sendHeaders()
#1 /var/www/html/prof-homepages/vendor/yiisoft/yii2/base/Application.php(656): yii\web\Response->send()
#2 /var/www/html/prof-homepages/vendor/faravaghi/yii2-filemanager/models/Files.php(696): yii\base\Application->end()
#3 /var/www/html/prof-homepages/vendor/faravaghi/yii2-filemanager/controllers/FilesController.php(484): faravaghi\filemanager\models\Files->getFile()
#4 [internal function]: faravaghi\filemanager\controllers\FilesController->actionGetFile()
#5 /var/www/html/prof-homepages/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()
#6 /var/www/html/prof-homepages/vendor/yiisoft/yii2/base/Controller.php(180): yii\base\InlineAction->runWithParams()
#7 /var/www/html/prof-homepages/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction()
#8 /var/www/html/prof-homepages/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction()
#9 /var/www/html/prof-homepages/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest()
#10 /var/www/html/prof-homepages/frontend/web/index.php(18): yii\base\Application->run()
#11 {main}