在R中求解线性整数规划:构造向量x2满足目标函数最小化
解决方案
思路
要构造向量x2使得abs(sum(x2 - x1 > 1) - 50)最小,核心逻辑如下:
- 先筛选不可能满足
x2 - x1 > 1的位置:当x1为6或7时,x2最大取7,差值最多为1或0,无法满足条件,这些位置只能计入"不满足"统计。 - 对
x1 <=5的位置,可通过设置x2 = x1 + 2(或其他1-7范围内的更大值)满足条件。我们需要从这些可满足位置中选择尽可能接近50个的数量来设置满足条件,剩余位置任意取1-7的整数即可。
R代码实现
# 加载给定的x1向量 x1 <- c(3L, 4L, 2L, 5L, 1L, 3L, 2L, 5L, 2L, 2L, 1L, 2L, 2L, 2L, 3L, 5L, 3L, 3L, 3L, 1L, 5L, 2L, 2L, 7L, 2L, 4L, 2L, 2L, 3L, 3L, 1L, 5L, 2L, 4L, 3L, 2L, 4L, 3L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 3L, 4L, 3L, 2L, 4L, 3L, 2L, 3L, 3L, 4L, 5L, 3L, 2L, 3L, 3L, 3L, 4L, 2L, 4L, 4L, 4L, 2L, 4L, 2L, 4L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 3L, 2L, 2L, 4L, 3L, 2L, 6L, 5L, 5L, 3L, 3L, 2L, 3L, 2L, 3L, 3L, 4L, 3L, 2L, 2L) # 找出可满足x2 - x1 >1的位置(x1 <=5) possible_pos <- which(x1 <= 5) possible_count <- length(possible_pos) # 确定需要设置为满足条件的位置数量:尽可能接近50,不超过可满足总数 target_k <- max(0, min(possible_count, 50)) # 初始化x2为1(任意1-7的整数均可) x2 <- rep(1, length(x1)) # 随机选择target_k个可满足位置,设置x2为满足条件的值(这里用x1+2,确保不超过7) selected_pos <- sample(possible_pos, target_k) x2[selected_pos] <- pmin(x1[selected_pos] + 2, 7) # 验证结果 satisfied_num <- sum(x2 - x1 > 1) objective_value <- abs(satisfied_num - 50) cat("满足x2 - x1 >1的元素数量:", satisfied_num, "\n") cat("目标函数值:", objective_value, "\n")
结果说明
- 运行代码后,会输出满足条件的元素数量以及对应的目标函数值。
- 如果可满足位置总数≥50,能恰好得到50个满足条件的元素,此时目标函数值为0(最优解);如果可满足位置总数<50,最多只能达到该总数的满足量,目标函数值为
50 - possible_count,这是当前约束下的最小可能值。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

