咨询大家一个优化问题

对应原来的军事天地,显然不完全是讨论军事。

版主: Softfist

leecode
见习点评
见习点评
帖子: 1334
注册时间: 2022年 10月 8日 22:33
昵称(选填): leecode

#43 Re: 咨询大家一个优化问题

帖子 leecode »

我估计另外一个条件是10年后哪个组合涨价多?
头像
(ヅ)
论坛精英
论坛精英
帖子: 5602
注册时间: 2022年 8月 21日 14:20

#45 Re: 咨询大家一个优化问题

帖子 (ヅ) »

none 写了: 2024年 5月 7日 19:58 @lightfast@赖美豪中

怎么在这个求解器里限定x_1, x_2, x_3....都是正整数?

打个比方:
x_1>0, x_2>0, x_3>0, x_4>0, x_5>0, x_6>0
90.5x_1+81x_2+120x_3+325x_4+15x_5+43.5x_6<= 100000
求在这六个正整数变量在什么情况达到最大值。
你的目标函数是什么?aka "这六个正整数变量在什么情况达到最大值"这句话不清楚

假设目标函数为x1+x2+...+x6,要其最大化的话,matlab可以这么写。其它情况自己修改f
---------------------------------
% https://www.mathworks.com/help/optim/ug/linprog.html
A = [90.5, 81, 120, 325, 15, 43.5]
A = [A
-eye(6)]
b = [100000, zeros(1, 6)]'

f = -ones(6,1)
sol = linprog(f,A,b)
---------------------------------
结果是x5 = 6.67E3,其它为0,原因很简单,x5最便宜
图片
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#46 Re: 咨询大家一个优化问题

帖子 none楼主 »

x1,x2,x3....x6均不为零,均为正整数。
分别为多少的时候实现既满足90.5x_1+81x_2+120x_3+325x_4+15x_5+43.5x_6<= 100000,
又能达到最接近100000的最大值。
(ヅ) 写了: 2024年 5月 7日 23:54 你的目标函数是什么?aka "这六个正整数变量在什么情况达到最大值"这句话不清楚

假设目标函数为x1+x2+...+x6,要其最大化的话,matlab可以这么写。其它情况自己修改f
---------------------------------
% https://www.mathworks.com/help/optim/ug/linprog.html
A = [90.5, 81, 120, 325, 15, 43.5]
A = [A
-eye(6)]
b = [100000, zeros(1, 6)]'

f = -ones(6,1)
sol = linprog(f,A,b)
---------------------------------
结果是x5 = 6.67E3,其它为0,原因很简单,x5最便宜
头像
(ヅ)
论坛精英
论坛精英
帖子: 5602
注册时间: 2022年 8月 21日 14:20

#47 Re: 咨询大家一个优化问题

帖子 (ヅ) »

none 写了: 2024年 5月 8日 00:03 x1,x2,x3....x6均不为零,均为正整数。
分别为多少的时候实现既满足90.5x_1+81x_2+120x_3+325x_4+15x_5+43.5x_6<= 100000,
又能达到最接近100000的最大值。
那用intlinprog
=========================
% https://www.mathworks.com/help/optim/ug/linprog.html
% https://www.mathworks.com/help/optim/ug ... f9f-intcon
f = -[90.5, 81, 120, 325, 15, 43.5]
A = [-f
-eye(6)]
b = [100000, -ones(1, 6)]'
intcon = 1:6
% sol = linprog(f,A,b)
x = intlinprog(f, intcon, A, b)
val = -f * x
==========================
x = [3, 1, 2, 1, 8, 2275]
图片
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#48 Re: 咨询大家一个优化问题

帖子 none楼主 »

好的,谢谢。等会我试一下
(ヅ) 写了: 2024年 5月 8日 00:15 那用intlinprog
=========================
% https://www.mathworks.com/help/optim/ug/linprog.html
% https://www.mathworks.com/help/optim/ug ... f9f-intcon
f = -[90.5, 81, 120, 325, 15, 43.5]
A = [-f
-eye(6)]
b = [100000, -ones(1, 6)]'
intcon = 1:6
% sol = linprog(f,A,b)
x = intlinprog(f, intcon, A, b)
val = -f * x
==========================
x = [3, 1, 2, 1, 8, 2275]
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#49 Re: 咨询大家一个优化问题

帖子 none楼主 »

前面你给的那个链接怎么限定变量为正整数?
(ヅ) 写了: 2024年 5月 8日 00:15 那用intlinprog
=========================
% https://www.mathworks.com/help/optim/ug/linprog.html
% https://www.mathworks.com/help/optim/ug ... f9f-intcon
f = -[90.5, 81, 120, 325, 15, 43.5]
A = [-f
-eye(6)]
b = [100000, -ones(1, 6)]'
intcon = 1:6
% sol = linprog(f,A,b)
x = intlinprog(f, intcon, A, b)
val = -f * x
==========================
x = [3, 1, 2, 1, 8, 2275]
头像
(ヅ)
论坛精英
论坛精英
帖子: 5602
注册时间: 2022年 8月 21日 14:20

#50 Re: 咨询大家一个优化问题

帖子 (ヅ) »

none 写了: 2024年 5月 8日 00:39 前面你给的那个链接怎么限定变量为正整数?
intcon变量限制整数,参考文档

正整数限制是在Ax<=b里面第2-7行, -I x <= -[1 1 1 1 1 1]^T

https://www.mathworks.com/help/optim/ug ... f9f-intcon
图片
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#51 Re: 咨询大家一个优化问题

帖子 none楼主 »

是问下面这个链接,其他的我看着有点烧脑,得专门花时间学习一下:
https://www.wolframalpha.com/widgets/vi ... 7d6d496120
(ヅ) 写了: 2024年 5月 8日 00:44 intcon变量限制整数,参考文档

正整数限制是在Ax<=b里面第2-7行, -I x <= -[1 1 1 1 1 1]^T

https://www.mathworks.com/help/optim/ug ... f9f-intcon
blinkingdoll
见习写手
见习写手
帖子: 106
注册时间: 2023年 6月 20日 16:49
昵称(选填): papapp

#52 Re: 咨询大家一个优化问题

帖子 blinkingdoll »

赖美豪中 写了: 2024年 5月 7日 14:55 chatgpt这么水吗。。。。。
用现在那种ai写代码完全就是用来忽悠文科生的.
这种方式把代码串起来,出来的垃圾要修改比直接写不知道费劲多少倍.

这种破道具都上来忽悠投资了,可见确实也没有什么真好东西了.
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#53 Re: 咨询大家一个优化问题

帖子 none楼主 »

这个问题我最后还是通过Excel来解决的。

(1)在Excel里加载“规划求解”:
https://jingyan.baidu.com/article/fa412 ... 0928d.html
(2)在Excel里使用“规划求解”:
https://www.excel22.com/1143.html

none 写了: 2024年 5月 7日 08:20 总金额一定,需要购买几种商品。
商品的单价确定,那么每种商品的购买数量如何优化,使得(总金额-总花费)最小化。

应该是很简单的,
但我有点急,
需要知道最快解决问题的工具。

Excel可以做,
但我的Excel没有“规划求解”加载项。
头像
verdelite
论坛元老
论坛元老
帖子: 16083
注册时间: 2022年 7月 21日 23:33
昵称(选填): 众傻之傻

#54 Re: 咨询大家一个优化问题

帖子 verdelite »

da1gaku 写了: 2024年 5月 7日 09:23 你这个是 Knapsack Problem原型
一般用动态规划法
拿个python写个小程序穷举就可以了。
没有光子;也没有量子能级,量子跃迁,量子叠加,量子塌缩和量子纠缠。
LightFast
职业作家
职业作家
帖子: 519
注册时间: 2022年 7月 21日 09:24

#55 Re: 咨询大家一个优化问题

帖子 LightFast »

none 写了: 2024年 5月 8日 08:01 这个问题我最后还是通过Excel来解决的。

(1)在Excel里加载“规划求解”:
https://jingyan.baidu.com/article/fa412 ... 0928d.html
(2)在Excel里使用“规划求解”:
https://www.excel22.com/1143.html
我好奇试了一下,Excel的结果居然是错的。None你的结果是多少?我得到的总花费居然小于100000,而这个问题显然有一个结果是正好等于100000的。前面有人用MatLab已经算出来了。当然这个最优解不是唯一的,有多种组合。
上次由 LightFast 在 2024年 5月 8日 14:46,总共编辑 1 次。
头像
Yellen
论坛点评
论坛点评
帖子: 2844
注册时间: 2022年 7月 23日 14:04

#57 Re: 咨询大家一个优化问题

帖子 Yellen »

none 写了: 2024年 5月 7日 08:20 总金额一定,需要购买几种商品。
商品的单价确定,那么每种商品的购买数量如何优化,使得(总金额-总花费)最小化。

应该是很简单的,
但我有点急,
需要知道最快解决问题的工具。

Excel可以做,
但我的Excel没有“规划求解”加载项。
尼玛,本版一个学过经济101的都没有吗?

楼主这是个什么题目?用数学语言描述,总金额m。假如有K种商品,价格是p1,..., pK。购买量是x1,..., xK

要求(总金额-总花费)最小化?这是说 m - p1× x1 - p2 × x2 -...- pK × xK 最小化?

x1 和 xK 要整数吗?不要整数有无数解。这都什么没逻辑的问题?
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#58 Re: 咨询大家一个优化问题

帖子 none楼主 »

当然是整数,你买东西不按件数?
Yellen 写了: 2024年 5月 8日 14:55 尼玛,本版一个学过经济101的都没有吗?

楼主这是个什么题目?用数学语言描述,总金额m。假如有K种商品,价格是p1,..., pK。购买量是x1,..., xK

要求(总金额-总花费)最小化?这是说 m - p1× x1 - p2 × x2 -...- pK × xK 最小化?

x1 和 xK 要整数吗?不要整数有无数解。这都什么没逻辑的问题?
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#59 Re: 咨询大家一个优化问题

帖子 none楼主 »

你把结果贴一下。
我的结果是[67,59,88,241,18,0]对应单价[90.5,81,120,325,15,43.5]
可以允许件数大于等于零的整数,总花费为99997.5元。
LightFast 写了: 2024年 5月 8日 14:43 我好奇试了一下,Excel的结果居然是错的。None你的结果是多少?我得到的总花费居然小于100000,而这个问题显然有一个结果是正好等于100000的。前面有人用MatLab已经算出来了。当然这个最优解不是唯一的,有多种组合。
LightFast
职业作家
职业作家
帖子: 519
注册时间: 2022年 7月 21日 09:24

#60 Re: 咨询大家一个优化问题

帖子 LightFast »

none 写了: 2024年 5月 8日 18:51 你把结果贴一下。
我的结果是[67,59,88,241,18,0]对应单价[90.5,81,120,325,15,43.5]
可以允许件数大于等于零的整数,总花费为99997.5元。
根据初始条件不同会得到不同的结果,比如这个结果:
【0,0,833,0,2,0】, 对应总数99990.

改一下初始条件又会得到另一个结果:
【1,1,826,2,1,1】,对应总数为100000. 这才是一个正确的结果。

前面【zi】用matlab找到的一组结果: [3, 1, 2, 1, 8, 2275]也是正确的。

另外,python 的scipy.optimize.linprog 及scipy.optimize.milp缺省用的都是
一个很有名软件包highs,居然得到的解也是错的。

后来试了一下只有cvxpy用的GLPK_MI还比较可靠,不同的初始值都能找到
最优解。比如:【0, 75, 0,289, 0, 0】, 81*75+325*289=100000,
或者【1,3,1,302,9,29】也是100000.
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#61 Re: 咨询大家一个优化问题

帖子 none楼主 »

哇,真的呀:
【1,1,826,2,1,1】,对应总数为100000. 这才是一个正确的结果。
LightFast 写了: 2024年 5月 8日 21:22 根据初始条件不同会得到不同的结果,比如这个结果:
【0,0,833,0,2,0】, 对应总数99990.

改一下初始条件又会得到另一个结果:
【1,1,826,2,1,1】,对应总数为100000. 这才是一个正确的结果。

前面【zi】用matlab找到的一组结果: [3, 1, 2, 1, 8, 2275]也是正确的。

另外,python 的scipy.optimize.linprog 及scipy.optimize.milp缺省用的都是
一个很有名软件包highs,居然得到的解也是错的。

后来试了一下只有cvxpy用的GLPK_MI还比较可靠,不同的初始值都能找到
最优解。比如:【0, 75, 0,289, 0, 0】, 81*75+325*289=100000,
或者【1,3,1,302,9,29】也是100000.
denizen
著名点评
著名点评
帖子: 5147
注册时间: 2022年 8月 2日 16:22
昵称(选填): 恓惶的反革命家

#62 Re: 咨询大家一个优化问题

帖子 denizen »

LightFast 写了: 2024年 5月 8日 14:43 我好奇试了一下,Excel的结果居然是错的。None你的结果是多少?我得到的总花费居然小于100000,而这个问题显然有一个结果是正好等于100000的。前面有人用MatLab已经算出来了。当然这个最优解不是唯一的,有多种组合。
多稀罕啊。

用Gradient来找整数,当然可能错过极值。
denizen
著名点评
著名点评
帖子: 5147
注册时间: 2022年 8月 2日 16:22
昵称(选填): 恓惶的反革命家

#63 Re: 咨询大家一个优化问题

帖子 denizen »

none 写了: 2024年 5月 8日 21:53 哇,真的呀:
【1,1,826,2,1,1】,对应总数为100000. 这才是一个正确的结果。
你真是教授吗?

任何工科,也不至于吧?

微软excel的solver算法,没有一个是穷举的。
头像
none楼主
论坛支柱
论坛支柱
帖子: 11670
注册时间: 2022年 7月 22日 13:46

#64 Re: 咨询大家一个优化问题

帖子 none楼主 »

我的研究用不上这些。
现在学习了。
denizen 写了: 2024年 5月 9日 00:23 你真是教授吗?

任何工科,也不至于吧?

微软excel的solver算法,没有一个是穷举的。
回复

回到 “军事天地(Military)”