You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:03:13