public void setOptions(String[] options) throws Exception {
    String	tmpStr;
    String[]	tmpOptions;

    // numeric generator
    tmpStr = Utils.getOption("num", options);
    if (tmpStr.length() != 0) { 
      tmpOptions    = Utils.splitOptions(tmpStr);
      tmpStr        = tmpOptions[0];
      tmpOptions[0] = "";
      setNumericGenerator((NumericAttributeGenerator) Utils.forName(Generator.class, tmpStr, tmpOptions));
    }
    else {
      setNumericGenerator((NumericAttributeGenerator) Utils.forName(Generator.class, defaultNumericGeneratorString(), null));
    }

    // nominal generator
    tmpStr = Utils.getOption("nom", options);
    if (tmpStr.length() != 0) { 
      tmpOptions    = Utils.splitOptions(tmpStr);
      tmpStr        = tmpOptions[0];
      tmpOptions[0] = "";
      setNominalGenerator((NominalAttributeGenerator) Utils.forName(Generator.class, tmpStr, tmpOptions));
    }
    else {
      setNominalGenerator((NominalAttributeGenerator) Utils.forName(Generator.class, defaultNominalGeneratorString(), null));
    }

    //target rejection rate
    tmpStr = Utils.getOption("trr", options);
    if (tmpStr.length() != 0)
      setTargetRejectionRate(Double.parseDouble(tmpStr));
    else
      setTargetRejectionRate(0.1);

    //target class label
    tmpStr = Utils.getOption("tcl", options);
    if (tmpStr.length() != 0)
      setTargetClassLabel(tmpStr);
    else
      setTargetClassLabel("target");

    //cross validation repeats
    tmpStr = Utils.getOption("cvr", options);
    if (tmpStr.length() != 0)
      setNumRepeats(Integer.parseInt(tmpStr));
    else
      setNumRepeats(10);

    //cross validation fold size
    tmpStr = Utils.getOption("cvf", options);
    if (tmpStr.length() != 0)
      setPercentageHeldout(Double.parseDouble(tmpStr));
    else
      setPercentageHeldout(10.0);

    //proportion generated
    tmpStr = Utils.getOption("P", options);
    if (tmpStr.length() != 0)
      setProportionGenerated(Double.parseDouble(tmpStr));
    else
      setProportionGenerated(0.5);

    //use laplace
    setUseLaplaceCorrection(Utils.getFlag('L',options));

    //set whether to exclusively use the density estimate
    setDensityOnly(Utils.getFlag('E', options));

    //use instance weights
    setUseInstanceWeights(Utils.getFlag('I', options));
    
    // set the parent's options first
    super.setOptions(options);
  }