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

使用constrOptim最大化生产函数的两类问题求解

问题解答

问题1:解决"argument 'K' is missing"报错

constrOptim要求目标函数的输入是单个向量参数,但你定义的production_function用了两个独立参数L和K,导致函数无法正确接收theta向量。修改生产函数,让它接收向量参数并拆分出L和K即可:

production_function <- function(theta) {
  L <- theta[1]
  K <- theta[2]
  K*L + L
}

问题2:将不等式约束改为等式约束

constrOptim仅支持线性不等式约束,要实现2*L +1.4*K =100的等式约束,有两种可行方案:

方案1:把等式拆成对偶不等式约束

等式A = B等价于A ≥ B且A ≤ B,对应到constrOptim的参数中就是添加反向约束:

# 构造约束矩阵:包含2L+1.4K≥100、2L+1.4K≤100、L>0、K>0
ui <- rbind(c(2, 1.4), c(-2, -1.4), c(1, 0), c(0, 1))
ci <- c(100, -100, 0, 0)

# 调用优化函数
result <- constrOptim(theta = c(30,30), ui = ui, ci = ci, f = production_function, grad = NULL)

这种方法通过两个不等式约束逼近等式,数值优化中可达到近似等式的效果。

方案2:拉格朗日乘数法转化为无约束优化

利用等式约束消去一个变量,比如从2L +1.4K =100解出K = (100 - 2L)/1.4,代入生产函数转化为单变量优化问题:

# 代入约束后的单变量生产函数
prod_single_var <- function(L) {
  K <- (100 - 2*L)/1.4
  K*L + L
}

# 求解最大值(L的取值范围:0 < L < 50,保证K>0)
result <- optimize(f = prod_single_var, interval = c(0, 50), maximum = TRUE)

这种方法更直接,将二维优化简化为一维,计算效率更高。


内容的提问来源于stack exchange,提问作者Tunay Sabri Yüksel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:27:25