public void transferWeights(MLNModel weightModel, boolean skipLE) {
   List<MLNFormula> formulasToRemove = new ArrayList<MLNFormula>();
   boolean transfered;
   List<MLNFormula> formulasToAdd = new ArrayList<MLNFormula>();
   for (MLNFormula weightFormula : weightModel.getWeightedFormulas()) {
     transfered = false;
     if (weightFormula.getProbabilityWeight() != null
         || weightFormula.getUtilityWeight() != null) {
       for (MLNFormula targetFormula : getAll(MLNFormula.class)) {
         if (weightFormula
             .getPlainFormula()
             .contentEquals(targetFormula.getPlainFormula(), false, false)) {
           targetFormula.setProbabilityWeight(weightFormula.getProbabilityWeight());
           targetFormula.setUtilityWeight(weightFormula.getUtilityWeight());
           transfered = true;
           break;
         } else if (!targetFormula.isHardRule() && targetFormula.getProbabilityWeight() == null)
           targetFormula.setProbabilityWeight(buildMLNWeight(0.0));
       }
     }
     if (!transfered) {
       formulasToAdd.add(weightFormula);
     }
   }
   for (MLNFormula quantifiedFormula : getQuantifiedFormulas()) {
     if (quantifiedFormula.getPlainFormula() != null
         && quantifiedFormula.getPlainFormula().getQuantification() != null
         && quantifiedFormula
             .getPlainFormula()
             .getQuantification()
             .getRelation()
             .equals(MLNRelation.LE)
         && skipLE) {
       formulasToRemove.add(quantifiedFormula);
     }
   }
   for (MLNFormula formula : formulasToRemove) removeMlnObject(formula);
   for (MLNFormula formula : formulasToAdd) {
     addMlnObject(formula);
   }
 }
 public void removeUnusedPredicates() {
   for (MLNPredicate predicate : unusedPredicates) {
     removeMlnObject(predicate);
   }
 }