⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csp.java

📁 CSP算法java实现
💻 JAVA
字号:
package aima.search.csp;

import java.util.ArrayList;
import java.util.List;

import aima.util.Util;

/**
 * @author Ravi Mohan
 * 
 */

public class CSP {

	// private Assignment assignment;

	private Domain domains;

	private Constraint constraints;

	private List<String> variables;

	public CSP(List<String> variables, Constraint constraints) {
		this.variables = variables;
		// this.assignment = new Assignment(variables);
		this.domains = new Domain(variables);
		this.constraints = constraints;
	}

	public CSP(List<String> variables, Constraint constraints, Domain domains) {
		this.variables = variables;
		// this.assignment = new Assignment(variables);
		this.domains = domains;
		this.constraints = constraints;
	}

	public List defaultOrderDomainOf(String variable) {
		return domains.getDomainOf(variable);
	}

	public Assignment backTrackingSearch() {
		return recursiveBackTrackingSearch(new Assignment(variables));
	}

	private Assignment recursiveBackTrackingSearch(Assignment anAssignment) {
		if (anAssignment.isComplete()) {
			return anAssignment;
		}
		String variable = anAssignment.selectFirstUnassignedVariable();
		List domainValues = defaultOrderDomainOf(variable);
		for (int i = 0; i < domainValues.size(); i++) {
			Object value = domainValues.get(i);

			if (constraints.isSatisfiedWith(anAssignment, variable, value)) {
				anAssignment.setAssignment(variable, value);
				Assignment result = recursiveBackTrackingSearch(anAssignment);
				if (result != null) {
					return result;
				}
				anAssignment.remove(variable);
			}
		}
		return null;// failure
	}

	public Assignment mcSearch(int maxSteps) {
		Assignment randomAssignment = generateRandomAssignment();

		for (int i = 0; i < maxSteps; i++) {

			if (randomAssignment.satisfies(constraints)) {
				return randomAssignment;
			} else {
				String conflictedVariable = Util
						.selectRandomlyFromList(randomAssignment
								.getConflictedVariables(constraints));
				Object minConflictValue = randomAssignment
						.getMinimumConflictingValueFor(conflictedVariable,
								domains.getDomainOf(conflictedVariable),
								constraints);
				randomAssignment.setAssignment(conflictedVariable,
						minConflictValue);
			}
		}
		return null;

	}

	private Assignment generateRandomAssignment() {
		List<String> vars = new ArrayList<String>();
		for (int i = 0; i < variables.size(); i++) {
			vars.add(variables.get(i));
		}
		Assignment assignment = new Assignment(vars);
		for (int i = 0; i < variables.size(); i++) {
			String variable = variables.get(i);
			Object randomValue = Util.selectRandomlyFromList(domains
					.getDomainOf(variable));
			// System.out.println("in generate Assignment setting");
			assignment.setAssignment(variable, randomValue);
		}
		return assignment;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -