All pastes #801647 Raw Edit

plutonas

public text v1 · immutable
#801647 ·published 2007-11-29 13:59 UTC
rendered paste body
(require :cl-graph)
(in-package :cl-graph)
(load "Graph.lisp")

(defun traveling-salesman-problem (graph)
  (let ((V '()))
    (iterate-vertexes graph #'(lambda (x)
				(push x V)))
;    (dotimes (i 500)
 ;     (rotatef (elt V (random 128)) (elt V (random 128))))
    (let ((min-tour (copy-list V)) (cur nil))
      (print (calculate-tour-cost graph min-tour))
      (while (< (calculate-tour-cost graph (setf cur (find-min-in-neigh graph min-tour)))
		(calculate-tour-cost graph min-tour))
	(print "test")
	(setf min-tour cur))
      (format t "Tour~a~%Cost:~a~%" min-tour (calculate-tour-cost graph min-tour)))))

(defun find-min-in-neigh (graph cur-best)
  (let ((min-tour-2 cur-best)
	(min-cost (calculate-tour-cost graph cur-best)))
    (loop for i from 0 to (- (length cur-best) 2) do
	  (loop for j from (1+ i) to (1- (length cur-best)) do
		(rotatef (elt min-tour-2 i) (elt min-tour-2 j))
		(if (< (calculate-tour-cost graph min-tour-2) min-cost)
		    (setf min-cost (calculate-tour-cost graph cur-best))
		    (rotatef (elt min-tour-2 i) (elt min-tour-2 j)))))
    (print (calculate-tour-cost graph min-tour-2))
    min-tour-2))