求个算法,多重循环的处理



for (float m = 2000; m < 3000; m += 1)
            {
                for (float i = 2000; i < 3000; i += 1)
                {
                    for (float j = 5500; j < 6500; j += 1)
                    {
                        for (float k = 250; k < 450; k += 1)
                        {
                            //目标是遍历求最优解
                            calWithParam(m, i, j, k, globalResult);
                        }
                    }
                }
            }

说明一下,calWithParam是一个函数,通过这个函数得到的结果跟已有的值作比较,得到跟目标尽可能贴合的值。 再具体就是说,比如10个不同高度对应的体积是测量出来的,要求的就是把这个函数计算出来的体积(跟高度相关的list)跟已有的不同高度的体积做比较,使结果尽可能跟测出来的体积对应。

那这个m,i,j,k就是想要的参数

题目都没有 咋算啊

你这只有循环,没有具体的运算,减少什么东西呢
必须知道你要算什么,才能知道为什么要循环这么多次,哪些循环是不必要的可以跳过的
如果就是必须计算这么多次,那结果到底是互相独立的还是迭代的,也完全不是一个优化思路
如果结果是互相独立的,那你完全可以找台128核电脑,然后开256个线程,一下速度就快了256倍

还是你

//for (float m = 2000; m < 3000 ; m ++)
//                {
//                    for (float i = 2000; i < 3000; i ++)
//                    {
//                        for (float j = 5500; j < 6500; j ++)
//                        {
//                            for (float k = 250; k < 450; k ++)
//                            {
//                                //计算程序,耗时1.5-2.5//
//}
//
//}
//
//}
//
//}

两种思路,一种就是多线程并发计算,你可以在 m 和 i 这两个循环上以合适的大小(比如间隔 200)开一个线程,以分段并发的方式来遍历。
第二种就是特征筛选,即把明显不符合条件的m, i, j, k 剔除,减少遍历。

还有就是 calWithParam() 函数是否存在优化的可能,该函数1.5~2.5秒的耗时着实有点长。

https://gitee.com/dkstar0412/test2.git 代码在这,麻烦帮帮看看呗?目前我的想法是开10线程来跑,粗筛一遍,然后选比较好的结果再细筛。 这样的结果依然不是很满意,而且很慢,跑一轮下来差不多一个小时了

你的代码我看过了,写得很混乱。
核心算法是 HuXingPartVolumn 和 HuXingPartVolumn1 两个函数(这两个函数理论上应该可以合并),其中的:

for(int i = 0; i < nsize; i++{
    for(int j = 0; j < 9999; j++){ // ???为什么是9999,而不是10000
        ...
    }
}

是最耗时的,再加上外围四个 for ,更是不得了,9999 * nsize * 200 * 1000 * 1000,如果这个核心的微积分算法无法重新设计或优化,那开多线程也还是好耗时的。
根据我的生活经验,像这种求取容器内的液体体积、剩余容积,它的每单位(每秒或每毫米高度)的体积变化一般是离散值,而不是线性的。你可以按照时间间隔(比如,每100毫秒,每秒)缩小遍历区间,然后制作出一个按时间变化的体积变化字典,在实际应用时直接查询这个字典就就好,毕竟容器制造出来后这个容积变化字典也就固定了。

数据量太大了。这4层循环会导致2000亿种不同组合,每条纪录如果使用50个字节存储,需要10T的存取空间。