All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xcsp.modeler.definitions.IObj Maven / Gradle / Ivy

Go to download

Java Tools for parsing XCSP3 instances, compiling JvCSP3 models, and checking solutions. For more information about XCSP3, follow www.xcsp.org

The newest version!
package org.xcsp.modeler.definitions;

import static org.xcsp.modeler.definitions.IRootForCtrAndObj.map;

import java.util.AbstractMap.SimpleEntry;
import java.util.Map;

import org.xcsp.common.IVar;
import org.xcsp.common.Types.TypeObjective;
import org.xcsp.common.predicates.XNode;

public interface IObj extends IRootForCtrAndObj {

	String MINIMIZE = "minimize";
	String MAXIMIZE = "maximize";
	String FUNCTION = ICtr.FUNCTION;
	String TYPE = "type";
	String LIST = ICtr.LIST;
	String COEFFS = ICtr.COEFFS;

	public interface IObjFunctional extends IObj {

		public static IObjFunctional buildFrom(IVar[] scope, boolean minimize, XNode tree) {
			return new IObjFunctional() {
				@Override
				public Map mapXCSP() {
					return map(SCOPE, scope, MINIMIZE, minimize, FUNCTION, tree);
				}
			};
		}

		@Override
		default DefXCSP defXCSP() {
			Map map = mapXCSP();
			DefXCSP def = def((Boolean) map.get(MINIMIZE) ? MINIMIZE : MAXIMIZE);
			return def.add(FUNCTION);
		}
	}

	public interface IObjSpecialized extends IObj {

		public static IObjSpecialized buildFrom(IVar[] scope, boolean minimize, TypeObjective type, String list, String coeffs) {
			return new IObjSpecialized() {
				@Override
				public Map mapXCSP() {
					return map(SCOPE, scope, MINIMIZE, minimize, TYPE, type, LIST, list, COEFFS, coeffs);
				}
			};
		}

		@Override
		default DefXCSP defXCSP() {
			Map map = mapXCSP();
			DefXCSP def = def((Boolean) map.get(MINIMIZE) ? MINIMIZE : MAXIMIZE);
			if (map.containsKey(TYPE)) {
				String t = ((TypeObjective) map.get(TYPE)).name().toLowerCase();
				def.attributes.add(new SimpleEntry<>(TYPE, t.equals("nvalues") ? "nValues" : t));
			}
			return def.add(LIST, COEFFS);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy