全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 悬赏大厅
949 3
2020-11-17
悬赏 50 个论坛币 未解决
现在有a1-a19,20个变量值,每个变量值都可能取0-100的数,需要求出不同的组合,并计算目标函数z的结果值。或者数据量太大,求Z的最大值也可以;求大家支支招怎么做。
a1-a19都从0-100分别取值,形成不同的组合
x1对应a1,x2对应a2,以此类推,x(i)的值是固定的
y1对应a1,y2对应a2,以此类推,y(i)的值是固定的
如果变量值可以再缩小呢,归类归成10个;变量取值也缩小到不同的,a1取10-50,a2取5-10,缩小范围去计算组合;如果用matlab应该用什么函数或者方法

变量取值0-100x取值y取值目标函数
a10-100取值x1y1z=a1*x1*y1+a2*x2*y2+….a19*x19*y19
a20-100取值x2y2
a30-100取值x3y3
a40-100取值x4y4
a50-100取值x5y5
a60-100取值x6y6
a70-100取值x7y7
a80-100取值x8y8
a90-100取值x9y9
a100-100取值x10y10
a110-100取值x11y11
a120-100取值x12y12
a130-100取值x13y13
a140-100取值x14y14
a150-100取值x15y15
a160-100取值x16y16
a170-100取值x17y17
a180-100取值x18y18
a190-100取值x19y19







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-11-18 11:19:57
(a1到 a19是19个变量,a0 - a19有20个变量)

首先,假设a1 到 a19都是整数,取值0-100,101个数,按100来算,要算出所有组合的z值比较困难,因为共有 10的 38次方 个组合,这个数值太大了。

然而要找到最大值,是比较容易的。用数学的方法来找:

a1到a19 变量是相互独立的,我们先看 a1 * x1 * y1 这一项

a1 的范围是 [0, 100], x1和y1是不变量,所以:
当 x1 * y1 大于零时,   a1 * x1 * y1 当 a1= 100 时,取得最大值
当 x1 * y1 小于等于零时, a1 * x1 * y1 当 a1=0 时,取得最大值

其他项  如 a2 * x2 * y2, .... , a19 * x19 * y19 都类似。

所以,z的最大值:  当xi * yi > 0, ai=100;   当 xi * yi <= 0, ai = 0, where i in [0, 19]

Python 代码实现如下:

x1 = [......]    # x1的值放在这个列表里,共20个
y1 = [......]    # y1的值放在这个列表里,共20个
z = 0
for i in range(20):     # 从 0 到 19, 共20项
    value = x1[i] * y1[i]
    if value > 0:
        z += 100 * value
print('Max z is:', z)

个人拙见,参考
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-11-18 11:33:54
rrrr336 发表于 2020-11-18 11:19
(a1到 a19是19个变量,a0 - a19有20个变量)

首先,假设a1 到 a19都是整数,取值0-100,101个数,按100来 ...
感谢回复,主要还是想要a1,a2,a3...a19的各种组合,结合后面的x1,y1去计算,找出哪种组合是最优的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-11-18 21:48:17
winnerfcjl 发表于 2020-11-18 11:33
感谢回复,主要还是想要a1,a2,a3...a19的各种组合,结合后面的x1,y1去计算,找出哪种组合是最优的
你的组合最优的意思,如果是最大值的话,上面已经用数学方法找出来了。最小值也类似。
最根本的原因是变量 a1-a19是线性且独立的,单调增加或减少,所以很容易算

但是,如果你想要穷举出所有组合,那么这个组合数太大了:
每个变量ai 有100个可能,19个变量,根据排列组合里的乘法原理,共有100的19次方 种组合,即10的38次方。

这个数有多大呢,假设你的计算机指令 1 纳秒运行1个指令,即 10的 (-9)次方 秒/ 指令,即1秒钟能执行10的9次方 条指令, 再假设一个指令就能算出一个值,   
算完的时间为:
(10^38 /  10^9 ) 秒 / 3600  / 24  / 365  =  3.170979198376459e+21  年,
简化一下, 3的21次方   3^21 = 10460353203   大约 104亿年
所以,穷举所有组合 需要超过 100 亿年的时间。是不可能算的。
放弃穷举吧

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群