pbil python 算法_分布估计算法解决多元背包问题【java描述】

该博客详细介绍了如何用Python实现分布估计算法来解决多元背包问题。通过阅读文件,解析输入数据,包括物品数量、背包数量、每个物品的权重以及每个背包的容量和约束条件,来构建MKPInstance实例。文章提供了从Java代码转换为Python算法的思路。
摘要由CSDN通过智能技术生成

1 importjava.io.BufferedReader;2 importjava.io.FileReader;3 importjava.io.IOException;4

5 public classMKPReader {6 public static int count = 0;7 public static int i = 0;8 public staticBufferedReader in;9 public static int weightcount = 0;10 public static int weightflag = 0;11 public static MKPInstance convertgkMKPInstance(String inputfilename) throwsIOException{12 //System.out.println("Reading input sequences from file "+inputfilename);

13 in = new BufferedReader(newFileReader(inputfilename));14 String line = in.readLine(); //first line of file contains number of knapsacks and objects

15 line =line.trim();16 String[] fields = line.split("\\s+");17 MKPInstance instance = newMKPInstance();18 instance.n = Integer.parseInt(fields[0]);//objects 横向

19 instance.m = Integer.parseInt(fields[1]);//knapsacks 纵向

20 instance.x = Integer.parseInt(fields[2]);21 instance.weight = new int[instance.n];22 instance.cap = new int[instance.m];23 instance.constr = new int[instance.m][instance.n];24 weightflag=instance.m;25 weightcount = 0;26 do{27 line =in.readLine();28 line =line.trim();29 count=0;30 processLine(count, line, instance);31 }while(i!=instance.n);32 line =in.readLine();33 line =line.trim();34 count=0;35 processKnapsacks(count, line, instance);36 in.close();37 count = 0;38 i = 0;39 returninstance;40 }41 public static MKPInstance convertMKPInstance(String inputfilename) throwsIOException{42 //System.out.println("Reading input sequences from file "+inputfilename);

43 in = new BufferedReader(newFileReader(inputfilename));44 String line = in.readLine(); //first line of file contains number of knapsacks and objects

45 line =line.trim();46 String[] fields = line.split("\\s+");47 MKPInstance instance = newMKPInstance();48 instance.n = Integer.parseInt(fields[0]);//objects

49 instance.m = Integer.parseInt(fields[1]);//knapsacks

50 instance.x = Integer.parseInt(fields[2]);51 instance.weight = new int[instance.n];52 instance.cap = new int[instance.m];53 instance.constr = new int[instance.m][instance.n];54 line =in.readLine();55 line =line.trim();56 count=0;57 processWeights(count, line, instance);58 do{59 line =in.readLine();60 line =line.trim();61 count=0;62 processConstraints(count, line, instance);63 }while(i!=instance.m);64 line =in.readLine();65 line =line.trim();66 count=0;67 processKnapsacks(count, line, instance);68 in.close();69 count = 0;70 i = 0;71 instance.maxprofit = 0;72 for(int i = 0; i< instance.n;i++){73 if (instance.weight[i]>instance.maxprofit){ //find largest profit value

74 instance.maxprofit=instance.weight[i];75 }76 }77 returninstance;78 }79 public static void processWeights(int count, String line, MKPInstance instance)throwsIOException{80 String[] fields = line.split("\\s+");81 int counter =count;82 for (int j = 0; j < fields.length; j++) {83 int k =Integer.parseInt(fields[j]);84 instance.weight[j+count]=k;85 counter++;86 }87 if (counter !=instance.n){88 line =in.readLine();89 line =line.trim();90 processWeights(counter, line, instance);91 }92 }93 public static void processKnapsacks(int count, String line, MKPInstance instance)throwsIOException{94 String[] fields = line.split("\\s+");95 int counter =count;96 for (int j = 0; j < fields.length; j++) {97 int k =Integer.parseInt(fields[j]);98 instance.cap[j+count]=k;99 counter++;100 }101 if (counter !=instance.m){102 line =in.readLine();103 line =line.trim();104 processKnapsacks(counter, line, instance);105 }106 }107 public static void processConstraints(int count, String line, MKPInstance instance)throwsIOException{108 String[] fields = line.split("\\s+");109 int counter =count;110 for (int j = 0; j < fields.length; j++) {111 int k =Integer.parseInt(fields[j]);112 instance.constr[i][j+count]=k;113 counter++;114 }115 if (counter !=instance.n){116 line =in.readLine();117 line =line.trim();118 processConstraints(counter, line, instance);119 }120 else{i++;}121 }122 public static void processLine(int count, String line, MKPInstance instance)throwsIOException{123 String[] fields = line.split("\\s+");124 int counter =count;125 for (int j = 0; j < fields.length; j++) {126 int k =Integer.parseInt(fields[j]);127 if(weightflag==instance.m){128 instance.weight[weightcount]=k;129 weightcount++;130 weightflag=0;131 }else{132 instance.constr[counter][i]=k;133 counter++;134 weightflag++;135 }136 }137 if (counter !=instance.m){138 line =in.readLine();139 line =line.trim();140 processLine(counter, line, instance);141 }142 else{i++;}143 }144 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值