• 多目标条件下矿山充填材料配比优化


    目录

    一、背景

    二、C++代码

    三、结果


    一、背景

    为进一步实现了矿山的高效开采,保证采矿作业的安全,降低充填成本是某金矿提高经济效益的重要途径。矿山开采二步骤对采场充填体强度的要求为7d达到0.3 MPa,28d达到0.5 MPa,56d达到0.8 MPa。其中7d、28d、56d的单轴抗压强度分别为:

    7d单轴抗压强度:

    Y1=-29.32637+0.858937X1+0.204500X2+0.046460X3-0.002600X1X2-0.000620X1X3-0.000784X2X3-0.006344X12-0.000545X22+0.001053X32(Adjusted R2= 0.9844)

    28d单轴抗压强度:

    Y2=-18.18050+0.665938X1+0.106150X2-0.454540X3-0.002075X1X2+0.005520X1X3+0.000552X2X3-0.005563X12-(3.53492E-17) X22+ 0.004192X32(Adjusted R2= 0.9545)

    56d单轴抗压强度:

    Y3=-35.55125+1.07144X1+0.252775X2-0.161840X3-0.003400X1X2 + 0.002780X1X3-0.001112X2X3-0.008125X12-0.000440X22+0.002259X32(Adjusted R2=0.9801)

    采用多目标函数寻优方法优化料浆配比,以单位体积充填成本最低为优化目标即 min f,各材料充填成本为:矿山中和渣由全尾砂与酸性废水制作而成,加工费为1.2元/t;废石破碎加工价格为17元/t;水泥的价格为380元/t;工业用水的价格为1.6元/t。

    现根据料浆质量分数(X1)、废石掺量(X2)和灰砂比(X3) 分别计算出1 m3充填料浆中和渣的质量Ma、废石质量Ms、水泥质量Mj和水的质量Mw,以充填体强度为约束条件,即Y1≥0.3 MPa;Y2≥0.5 MPa;Y3≥0.8 MPa,建立优化模型下式所示

    二、C++代码

    1. #include
    2. using namespace std;
    3. void linspace(double start,double end,int n,float* y){
    4. double interval = (end-start)/n;
    5. for(int i = 0;i < n ;i++){
    6. y[i] = start + interval * i;
    7. }
    8. }
    9. int main(void){
    10. int length = 100;
    11. float ma[length];
    12. float ms[length];
    13. float mj[length];
    14. float mw[length];
    15. float X1,X2,X3,y1,y2,y3,result;
    16. linspace(0.001,2.418,length,ma);
    17. linspace(0.001,2.67,length,ms);
    18. linspace(0.001,3,length,mj);
    19. linspace(0.001,1,length,mw);
    20. long long count = 0;
    21. int solveCount = 0;
    22. for(int i = 0;i < length;i++){
    23. for(int j = 0;j < length;j++){
    24. for(int k = 0;k < length;k++){
    25. for(int l = 0;l < length;l++){
    26. count++;
    27. if(ma[i]/2.418 + ms[j]/2.67 + mj[k]/3 + mw[l] - 1 < 0.01 && ma[i]/2.418 + ms[j]/2.67 + mj[k]/3 + mw[l] - 1 > -0.01){
    28. // cout << ma[i] << " " << ms[j] << " " << mj[k] << " " << mw[l] << endl;
    29. X1 = (ma[i]+ms[j]+mj[k])/(ma[i]+ms[j]+mj[k]+mw[l])*100;
    30. X2 = ms[j]/(ma[i]+ms[j])*100;
    31. X3 = mj[k]/(ma[i]+ms[j])*100;
    32. // cout << X1 << " " << X2 << " " << X3 << endl;
    33. if(X1 <= 60 && X1 >= 56 && X2 >=30 && X2 <= 40 && X3 >= 12.5 && X3 <= 25){
    34. // if(true){
    35. y1 = -29.32637+0.858937*X1+0.204500*X2+0.046460*X3-0.002600*X1*X2-0.000620*X1*X3-0.000784*X2*X3-0.006344*X1*X1-0.000545*X2*X2+0.001053*X3*X3;
    36. // cout << count << " " << X1 << " " << X2 << " " << X3 << " " << y1 << endl;
    37. if(y1 >= 0.3){
    38. y2 = -18.18050+0.665938*X1+0.106150*X2-0.454540*X3-0.002075*X1*X2+0.005520*X1*X3+0.000552*X2*X3-0.005563*X1*X1-(3.53492E-17)*X2*X2+ 0.004192*X3*X3;
    39. if(y2 >= 0.5){
    40. y3=-35.55125+1.07144*X1+0.252775*X2-0.161840*X3-0.003400*X1*X2 + 0.002780*X1*X3-0.001112*X2*X3-0.008125*X1*X1-0.000440*X2*X2+0.002259*X3*X3;
    41. if(y3 >= 0.8){
    42. result = 1.2*ma[i] + 17*ms[j] + 380*mj[k] + 1.6*mw[l];
    43. cout << count << " " <" " << ms[j] << " " << mj[k] << " " << mw[l] << " " << X1 << " " << X2 << " " << X3 << " " << result << endl;
    44. }
    45. }
    46. }
    47. }
    48. }
    49. }
    50. }
    51. }
    52. }
    53. return 0;
    54. }

    暴力求解:代码采用最简单的暴力求解方法,即将待求值中和渣的质量Ma、废石质量Ms、水泥质量Mj和水的质量Mw采用linspace进行创建等差数列(组合密度取决于变量length),采用循环遍历每一种组合,并判断每一种组合是否满足模型的各个优化条件,若满足则输出。

    三、结果

    countMaMsMjMwX1X2X3f
    191006650.460230.26790.180940.6403658.671336.792924.8574.8884
    191006660.460230.26790.180940.6503558.295436.792924.8574.9043
    191105650.460230.294590.150950.6403658.58339.027819.998163.9459
    191106640.460230.294590.180940.6303759.749839.027823.971375.3261
    191106650.460230.294590.180940.6403659.371139.027823.971375.3421
    200906650.48440.241210.180940.6403658.603933.242424.936374.4636
    200906660.48440.241210.180940.6503558.227933.242424.936374.4796
    201005650.48440.26790.150950.6403658.515435.610820.065163.5212
    201006640.48440.26790.180940.6303759.68535.610824.051674.9014
    201006650.48440.26790.180940.6403659.30635.610824.051674.9174
    201105640.48440.294590.150950.6303759.599737.816919.377763.9589
    201105650.48440.294590.150950.6403659.220537.816919.377763.9749
    210905650.508570.241210.150950.6403658.447632.170820.132663.0964
    210906640.508570.241210.180940.6303759.619932.170824.132474.4766
    210906650.508570.241210.180940.6403659.240832.170824.132474.4926
    211005640.508570.26790.150950.6303759.534334.502319.440563.5342
    211005650.508570.26790.150950.6403659.15534.502319.440563.5502
    220905640.532740.241210.150950.6303759.468831.166119.503863.1095
    220905650.532740.241210.150950.6403659.089231.166119.503863.1254

  • 相关阅读:
    【JavaScript】手撕前端面试题:手写new操作符 | 手写Object.freeze
    七、 循环
    C/C++ 工程工具链搭建
    前端面试(4)—— DOM事件的总结
    【JVM系列】- 挖掘·JVM堆内存结构
    如何从电脑远程访问 iPhone?
    GIT rebase 命令使用
    算法矩阵提速原理
    在线问题反馈模块实战(十八):实现excel台账文件记录批量导入功能
    `算法知识` 最近公共祖先LCA
  • 原文地址:https://blog.csdn.net/zsllsz2022/article/details/127541050