Файл:Karmarkar.svg

Исходный файл (Файл SVG, номинально 720 × 540 пикселей, размер файла: 43 КБ)

Краткое содержание

ОписаниеКармаркар.svg
Русский: Решение примера LP в алгоритме Кармаркара. Синие линии показывают ограничения, красные показывают каждую итерацию алгоритма.
Дата
ИсточникСобственная работа
АвторЖакено

Лицензирование

Я, владелец авторских прав на данную работу, настоящим публикую ее на условиях следующей лицензии:
w:ru:Creative Commons
атрибуция доля одинаково
Этот файл лицензирован в соответствии с лицензией Creative Commons Attribution-Share Alike 4.0 International.
Вы свободны:
  • делиться – копировать, распространять и передавать работу
  • ремиксовать – адаптировать произведение
При следующих условиях:
  • атрибуция – Вы должны указать соответствующее авторство, предоставить ссылку на лицензию и указать, были ли внесены изменения. Вы можете сделать это любым разумным способом, но не таким образом, который подразумевает, что лицензиар одобряет вас или ваше использование.
  • распространяйте на равных условиях – если вы делаете ремиксы, преобразуете или дополняете материал, вы должны распространять свои вклады по той же или совместимой лицензии, что и оригинал.
https://creativecommons.org/licenses/by-sa/4.0CC BY-SA 4.0Creative Commons Attribution-Share Alike 4.0истинныйистинный

Исходный код (Python)

#!/usr/bin/env python # -*- кодировка: utf-8 -*- # # Скрипт на Python для иллюстрации сходимости алгоритма Кармаркара для # задачи линейного программирования. # # http://en.wikipedia.org/wiki/Karmarkar%27s_algorithm # # Алгоритм Кармаркара — это алгоритм, представленный Нарендрой Кармаркаром в 1984 году # для решения задач линейного программирования. Это был первый достаточно эффективный # алгоритм, решающий эти задачи за полиномиальное время. # # Алгоритм Кармаркара относится к классу методов внутренних точек: # текущее предположение для решения не следует границе допустимого # множества, как в симплекс-методе, а перемещается по внутренней части допустимой # области, улучшая приближение оптимального решения на определенную # долю с каждой итерацией и сходясь к оптимальному решению с # рациональными данными. # # Гийом Жакно # 2015-05-03 # CC-BY-SAимпортировать  numpy  как  np импортировать  matplotlib из  matplotlib.pyplot  импортировать  figure ,  show ,  rc ,  gridclass  ProblemInstance ( ) :  def  __init __ ( self ) :  n  =  2  m  =  11  self.A = np.zeros ( ( m , n ) ) self.B = np.zeros ( ( m , 1 ) ) self.C = np.array ( [ [ 1 ] , [ 1 ] ] ) self.A [ : , 1 ] = 1 для i в диапазоне ( 11 ) : p = 0,1 * i self.A [ i , 0 ] = 2,0 * p self.B [ i , 0 ] = p * p + 1,0                          класс  KarmarkarAlgorithm ( ) :  def  __init __ ( self , A , B , C )  : self.maxIterations = 100 self.A = np.copy ( A ) self.B = np.copy ( B ) self.C = np.copy ( C ) self.n = len ( C ) self.m = len ( B ) self.AT = A.transpose ( ) self.XT = None                        def  isConvergeCriteronSatisfied ( self ,  epsilon  =  1e-8 ):  если  np . size ( self . XT , 1 ) < 2 :  вернуть  False  если  np . linalg . norm ( self . XT [:, - 1 ] - self . XT [:, - 2 ], 2 )  <  epsilon :  вернуть  True def  resolve ( self ,  X0 = None ) :  # Проверка не выполняется  для неограниченной задачи , если  X0  равно  None :  X0  =  np.zeros ( ( self.n , 1 ) ) k = 0 X = np.copy ( X0 ) self.XT = np.copy ( X0 ) gamma = 0.5 for _ in range ( self.maxIterations ) : if self.isConvergeCriteronSatisfied ( ) : break V = self.B - np.dot ( self.A , X ) VM2 = np.linalg.matrix_power ( np.diagflat ( V ) , - 2 ) hx = np .dot ( np.linalg.matrix_power ( np.dot ( np.dot ( self.AT , VM2 ) , self.A ) , - 1 ) , self.C ) hv = - np.dot ( self.A , hx ) coeff = np.infty для p в диапазоне ( self.m ) : если hv [ p , 0 ] < 0 : coeff = np.min ( ( coeff , -V [ p , 0 ] / hv [ p , 0                                           ]))  альфа  =  гамма  *  коэфф  X  +=  альфа * hx  self . XT  =  np . конкатенация (( self . XT , X ), ось = 1 ) def  makePlot ( self , outputFilename  =  r 'Karmarkar.svg' ,  xs =- 0.05 ,  xe =+ 1.05 ):  rc ( 'grid' ,  linewidth  =  1 ,  linestyle  =  '-' ,  color  =  '#a0a0a0' )  rc ( 'xtick' ,  labelsize  =  15 )  rc ( 'ytick' ,  labelsize  =  15 )  rc ( 'font' , ** { 'family' : 'serif' , 'serif' :[ 'Palatino' ], 'size' : 15 })  rc ( 'text' ,  usetex = True ) fig  =  figure (  ) ax  =  fig.add_axes ( [ 0.12 , 0.12 , 0.76 , 0.76 ] ) grid ( True ) ylimMin = - 0.05 ylimMax = + 1.05 xsOri = xs xeOri = xe для i в диапазоне ( np.size ( self.A , 0 ) ) : xs = xsOri xe = xeOri a = - self.A [ i , 0 ] /self.A [ i , 1 ] b = + self.B [ i , 0 ] / self .A [ i , 1 ] ys = a * xs + b ye = a * xe + b if ys > ylimMax : ys = ylimMax xs = ( ylimMax - b ) / a if ye < ylimMin : ye = ylimMin xe = ( ylimMin - b ) / a ax . сюжет ([ xs , xe ], [ ys , ye ], \ lw = 1 , ls = '--' , цвет = 'b' ) ax . set_xlim (( xs , xe )) ax . сюжет ( self . XT [ 0 ,:], self . XT [ 1 ,:], \                                                                    lw  =  1 ,  ls  =  '-' ,  цвет  =  'r' , маркер  =  '  .' ) ax.plot  ( self.XT [ 0 , -1 ] , self.XT [ 1 , -1 ] , \ lw = 1 , ls = '-' , цвет = ' r' , маркер = ' o' ) ax.set_xlim ( ( ylimMin , ylimMax ) ) ax.set_ylim ( ( ylimMin , ylimMax )) ax.set_aspect ( ' равно ' ) ax.set_xlabel ( ' $ x_1 $ ' , поворот = 0 ) ax.set_ylabel ( ' $ x_2 $ ' , поворот = 0 ) ax . set_title ( r '$\max x_1+x_2\textrm{ st }2px_1+x_2\le p^2+1\textrm{, }\forall p \in [0.0,0.1,...,1.0]$' , размер шрифта = 15 ) рис . savefig ( имя_выводимого_файла ) рис . show ()                         если  __name__  ==  " __main__ " :  p  =  ProblemInstance ( )  k  =  KarmarkarAlgorithm ( p.A , p.B , p.C ) k.solve ( X0 = np.zeros ( ( 2,1 ) ) ) k.makePlot ( outputFilename = r ' Karmarkar.svg ' , xs = - 0.05 , xe = + 1.05 )        

Подписи

Добавьте однострочное объяснение того, что представляет собой этот файл.

Элементы, изображенные в этом файле

изображает

создатель

некоторая ценность

Имя автора строка : Gjacquenot
URL : https://commons.wikimedia.org/wiki/user:Gjacquenot
Имя пользователя Wikimedia : Gjacquenot

статус авторских прав

защищенный авторским правом

лицензия на авторское право

Creative Commons Attribution-ShareAlike 4.0 International

источник файла

оригинальное создание загрузчика

зарождение

3 мая 2015 г.

История файла

Нажмите на дату/время, чтобы просмотреть файл в том виде, в котором он был в тот момент.

Дата/ВремяМиниатюраРазмерыПользовательКомментарий
текущий15:34, 22 ноября 2017 г.720 × 540 (43 КБ)голландскийканадскийПравая часть для ограничений, судя по графику и коду, выглядит как p<sup>2</sup>+1, а не p<sup>2</sup> (обратите внимание на строку <tt>self.B[i,0] = p*p + 1.0</tt>). Обновил строку заголовка.
19:29, 3 мая 2015 г.720 × 540 (41 КБ)ЖакеноОбновленный дисплей ограничений
19:26, 3 мая 2015 г.720 × 540 (41 КБ)ЖакеноОбновленный дисплей ограничений
19:17, 3 мая 2015 г.720 × 540 (41 КБ)ЖакеноОбновленный дисплей ограничений
18:54, 3 мая 2015 г.720 × 540 (41 КБ)ЖакеноПользователь создал страницу с помощью UploadWizard

Глобальное использование файлов

Этот файл используют и другие вики:

  • Использование на ar.wikipedia.org
    • Дэниел Карри
  • Использование на fr.wikipedia.org
    • Алгоритм Кармаркара
  • Использование на ja.wikipedia.org
    • カーマーカーのアルゴリズム
  • Использование на ko.wikipedia.org
    • 내부점법
  • Использование на pt.wikipedia.org
    • Алгоритм Кармаркара
  • Использование на ru.wikipedia.org
    • Алгоритм Кармаркара
  • Использование на simple.wikipedia.org
    • Метод внутренней точки
  • Использование на uk.wikipedia.org
    • Алгоритм Кармаркара
  • Использование на zh.wikipedia.org
    • 内点法

Метаданные

Взято с "https://en.wikipedia.org/wiki/File:Karmarkar.svg"